home *** CD-ROM | disk | FTP | other *** search
/ Merciful 1 / Merciful - Disc 1.iso / software / b / blitz_basic / blitz_basic_ii.txt < prev    next >
Encoding:
Text File  |  1995-10-14  |  350.1 KB  |  10,325 lines

  1.                         BLITZ BASIC 2 LIBRARY GUIDE V1.3
  2.  
  3.                           Last updated on: 16-10-1994
  4.                                  Make a choice
  5.  
  6.              ALL PD/UPDATE COMMANDS            
  7.  
  8.              SEE ALL THE PD LIBRARIES INCLUDED 
  9.                          BUM MAGAZINES 1-6 / COMMANDS      
  10.              BUM 7                             
  11.              INFO                              
  12.  
  13.      This file contains all the commands of the following libraries:
  14.  
  15.                   CIA-TRACKER LIBRARY  
  16.                   COMMODITIES LIBRARY  
  17.                   ELMORE LIBRARY       
  18.                   FX LIBRARY           
  19.                   FNS LIBRARY          
  20.                   FUNC LIBRARY         
  21.                   GFX LIBRARY          
  22.                   PACK LIBRARY         
  23.                   PCF LIBRARY          
  24.                   REQ LIBRARY          
  25.                   RIANIM LIBRARY       
  26.                   TOOLTYPES LIBRARY    
  27.                   TRACKDISK LIBRARY    
  28.                   WB LIBRARY           
  29.                   ZONE-JOY LIBRARY     
  30.  
  31.  
  32. ============================================
  33. =    T R A C K D I S K    L I B R A R Y    =
  34. ============================================
  35.  
  36. (C)1994 Reflective Images
  37.  
  38. Written by Steve Matty.
  39.  
  40. You can do whatever the hell you like to this library but must still
  41. give me some credit!
  42.  
  43. Command List :
  44.  
  45.                  CLOSEDISK    
  46.                  MOTORON      
  47.                  MOTOROFF     
  48.                  =FORMATTRACK 
  49.                  =OPENDISK    
  50.                  =READSECTOR  
  51.                  =WRITESECTOR 
  52.                  =WRITEBOOT   
  53.  
  54.  
  55.  
  56.  
  57. Command : OpenDisk
  58. --------------------------------------------------------------------------
  59. Modes  : Amiga
  60. Syntax : success=OpenDisk(unit#)
  61.  
  62. This attempts to open unit 'unit#' of the trackdisk.device, for use with
  63. the other commands in this library. A return value of 0 indicates 
  64. failure, -1 indicates success.
  65.  
  66.  
  67. Statement : MotorOn
  68. --------------------------------------------------------------------------
  69. Modes  : Amiga
  70. Syntax : MotorOn unit#
  71.  
  72. This attempts to switch the drive motor on of the previously opened
  73. trackdisk unit (called with OpenDisk). You must call this command
  74. before attempting to ReadSector/WriteSector/FormatTrack/WriteBoot
  75.  
  76.  
  77. Statement : MotorOff
  78. --------------------------------------------------------------------------
  79. Modes  : Amiga
  80. Syntax : MotorOff unit#
  81.  
  82. This turns the drive motor of 'unit#' off.
  83.  
  84.  
  85. Command : ReadSector
  86. --------------------------------------------------------------------------
  87. Modes  : Amiga
  88. Syntax : [success=]ReadSector(unit#,sector#,buffer[,numsectors])
  89.  
  90. This attempts to read 'numsectors' sectors from a trackdisk device which
  91. has been opened with OpenDisk and has its Motor On. If numsectors is
  92. omitted then 1 sector is read. The data is read into the memory location
  93. pointed to by 'buffer'.
  94.  
  95. WARNING! Please MAKE SURE the MOTOR is _ON_ otherwise, all hell will break
  96. loose!!!
  97.  
  98.  
  99. Command : WriteSector
  100. --------------------------------------------------------------------------
  101. Modes  : Amiga
  102. Syntax : [success=]WriteSector(unit#,sector#,buffer[,numsectors])
  103.  
  104. This is the same as ReadSector except........... it writes! (and no, I 
  105. am not being lazy by not typing any decent docs)
  106.  
  107.  
  108. Command : FormatTrack
  109. --------------------------------------------------------------------------
  110. Modes  : Amiga
  111. Syntax : [success=]FormatTrack(unit#,track#,buffer[,numtracks])
  112.  
  113. This does a TD_FORMAT on the specified track number. Buffer should point
  114. to the area of memory which the track should be formatted with. I don't
  115. know why this command exists - but hey, it might come in useful.
  116.  
  117.  
  118. Statement : CloseDisk
  119. --------------------------------------------------------------------------
  120. Modes  : Amiga
  121. Syntax : CloseDisk unit#
  122.  
  123. This closes the trackdisk.device of the specified unit#. The Motor is
  124. automatically switched off if it is already on.
  125.  
  126.  
  127.  
  128. Command : WriteBoot
  129. --------------------------------------------------------------------------
  130. Modes  : Amiga
  131. Syntax : [success=]WriteBoot(unit#[,buffer])
  132.  
  133. This writes 1kilobyte of data to the bootblock of the specified disk unit.
  134. The optional buffer parameter should point to an area of memory with which
  135. to write the bootblock.
  136.  
  137.  
  138. RIAnim Library v1.0
  139. ===================
  140.  
  141. By Stephen McNamara
  142. (c)1994 Reflective Images
  143.  
  144.  RIANIM COMMANDS 
  145.  
  146. This library enables the playback of both Anim5 and Anim7 format
  147. animations.  It allows you to playback animations at any co-ordinate in a
  148. bitmap and supports different palettes for frames of the animation.  It
  149. also allows you to playback animations from FAST ram, thus you can now play
  150. massive animations that can only fit in FAST ram.
  151.  
  152. When playing back animations you must make sure that your display is
  153. double-buffered.  Please refer to the Blitz manual for information about
  154. how anims can be played back properly - or look at the example program
  155. included with this file.
  156.  
  157. Note: there may still be a few bugs in the animation playback routines - if
  158. you have any problems or spot any bugs then please contact us at the
  159. address given in the main file of this archive.
  160.  
  161.  
  162.  
  163.             These are the RIANIM library commands:
  164.  
  165.  
  166.                  ANIMLOOP         
  167.                  RIANIMINIT       
  168.                  RINEXTANIMFRAME  
  169.                  =RIANIMINIT      
  170.                  =RINEXTANIMFRAME 
  171.  
  172.  
  173.  
  174. Statement/Function: RIAnimInit
  175. --------------------------------------------------------------------------
  176. Modes : Amiga/Blitz
  177. Syntax: [suc=]RIAnimInit(address,bitmap#,palette#[,xy_offset])
  178.  
  179. This command attempts to take an animation held in memory (CHIP or FAST)
  180. and identify it as a supported animation format.  If it identifies it 
  181. okay it will set up the animation by unpacking frame 1 of the anim onto 
  182. the specified bitmap and copying the palette to the specified palette 
  183. object.
  184.  
  185. You must ensure that the bitmap is big and deep enough to actually hold
  186. the animation.  At the moment there is no checking of the bitmap size.  
  187. The palette object you give is automatically resized to the size of the 
  188. palette in the animation.
  189.  
  190. The optional parameter allows you to play an animation at an offset into
  191. a bitmap.  Thus you could center a half screen animation on a bitmap.  
  192. The offset is given as a byte offset from the start of each bitplane.  
  193. It is calculated like this:
  194.  
  195.             offset=(X/8)+(Y*(pixel_width/8))
  196.  
  197.             where: X and Y are your co-ordinates
  198.                    pixel_width is the width of your bitmap.
  199.  
  200. If used as a function, this command returns true for a successful
  201. initialise or false for failure.
  202.  
  203.  
  204. Statement/Function: RINextAnimFrame
  205. ------------------------------------------------------------------------
  206. Modes : Amiga/Blitz
  207. Syntax: [suc=]RINextAnimFrame bitmap#
  208.  
  209. This command attempts to unpack the next frame of a previously
  210. initialised animation onto the specified bitmap.  It returns true or 
  211. false to say whether it succeeded or not.
  212.  
  213.  
  214. Statement: AnimLoop
  215. ------------------------------------------------------------------------
  216. Modes : Amiga/Blitz
  217. Syntax: AnimLoop ON|OFF
  218.  
  219.   This command allows you to control the looping mode of the animation.
  220. With animloop off, playback of an animation will stop at the last frame 
  221. of it. Any attempt to draw another frame will fail.  With it on, 
  222. though, the animation will loop around.
  223.  
  224. Note: you must ensure that your animation has loop frames at the end of
  225. it if you want to loop the animation around.  The reverse of this is 
  226. true for animloop off - the animation must not have loop frames if you 
  227. don't want it to loop around.  If you select animloop off but have 
  228. looping frames in your anim then the animation will end by displaying a 
  229. copy of frame 2 of the animation.
  230.  
  231.  
  232.  
  233.  
  234. --------------------------------------------------------------------------
  235. ====          Reflective Images Commodities Library V0.9 (C)1994      ====
  236. --------------------------------------------------------------------------
  237.  
  238.  COMMODITIES COMMANDS 
  239.  
  240. Introduction
  241. ============
  242.  
  243. This library allows the easy use of Commodities. It requires Kickstart 2
  244. or higher.
  245.  
  246.  
  247.  
  248.                  The COMMODITIES library commands:
  249.  
  250.                  EXCHANGEAPPEAR     
  251.                  EXCHANGEDISAPPEAR  
  252.                  EXCHANGEENABLE     
  253.                  EXCHANGEDISABLE    
  254.                  EXCHANGEKILL       
  255.                  EXCHANGECHANGELIST 
  256.                  EXCHANGEUNIQUE     
  257.                  MAKECOMMODITY      
  258.                  SETSTATUS          
  259.                  SETHOTKEY          
  260.                  =HOTKEYHIT         
  261.                  =COMMODITYEVENT    
  262.                  =EXCHANGEMESSAGE   
  263.                  =CXAPPEAR          
  264.                  =CXDISAPPEAR       
  265.                  =CXENABLE          
  266.                  =CXDISABLE         
  267.                  =CXKILL            
  268.                  =CXCHANGELIST      
  269.                  =CXUNIQUE          
  270.  
  271.  
  272. Function : MakeCommodity
  273. --------------------------------------------------------------------------
  274. Modes  : Amiga
  275. Syntax : success=MakeCommodity(name$,title$,description$)
  276.  
  277. This command attempts to add your Commodity to the list of commodities.
  278. A return value of -1 indicates success, 0 means failure. (not enough 
  279. memory)
  280.  
  281. name$ refers to the name of the Commodity and it should be unique. This
  282. is the name that appears when running the Commodity Exchange program.
  283. title$ is the title of your program, e.g. "My Screen Blanker".
  284. description$ is a brief description of your program.
  285.  
  286. The Commodity Exchange program will then have 'name$' in its list of
  287. Commodities and when a user clicks on your commodity, it will display
  288. the title$ and description$. 
  289.  
  290.  
  291. Function : SetHotKey
  292. --------------------------------------------------------------------------
  293. Modes  : Amiga
  294. Syntax : success=SetHotKey(hotkey#,hotkeydescription$)
  295.  
  296. This will add a hotkey event to your commodity so that after a hotkey
  297. has been pressed you can find out which one.
  298.  
  299. e.g.        success=SetHotKey(0,"lalt lshift a")
  300.  
  301.  
  302. Function : HotKeyHit
  303. --------------------------------------------------------------------------
  304. Modes  : Amiga
  305. Syntax : hitkeynum=HotKeyHit
  306.  
  307. This will return the number of the hot key which has been hit since the
  308. last 'CommodityEvent' was called, or -1 if no such hotkey has been 
  309. activated.
  310.  
  311.  
  312. Function : CommodityEvent
  313. --------------------------------------------------------------------------
  314. Modes  : Amiga
  315. Syntax : anyevent=CommodityEvent
  316.  
  317. This looks to see if either
  318.     a) A hotkey has been pressed
  319.     b) A message from Exchange has been received
  320.  
  321. and returns -1 if such an event occurred, of 0 is nothing has yet 
  322. happened. This should be inside a Repeat-Until loop, e.g.
  323.  
  324.     Repeat
  325.       VWait
  326.       ev.l=Event
  327.       ce.l=CommodityEvent
  328.       hk.l=HotKeyHit        ; This must be used after                                         
  329.     Until ev or ce or hk            ; CommodityEvent
  330.  
  331.  
  332.  
  333. Statement : SetStatus
  334. --------------------------------------------------------------------------
  335. Modes  : Amiga
  336. Syntax : SetStatus on|off
  337.  
  338. This sets the status of your Commodity to either Active (on) or Inactive
  339. (off) - this can be seen by running the Commodities Exchange program.
  340.  
  341.  
  342. Function : ExchangeMessage
  343. --------------------------------------------------------------------------
  344. Modes  : Amiga
  345. Syntax : messnum.l=ExchangeMessage
  346.  
  347. This looks to see if the Commodities Exchange has issued you with as 
  348. message, e.g. Hide Interface, Show Interface. It returns the message ID 
  349. of the incoming message or 0 for no message.
  350.  
  351.  
  352. Functions: CxAppear/CxDisAppear/CxEnable/CxDisable
  353.                       CxKill/CxChangeList/CxUnique
  354. --------------------------------------------------------------------------
  355. Modes : Amiga
  356.  
  357. These are to be used in conjunction with ExchangeMessage, ie
  358.  
  359.     em.l=ExchangeMessage
  360.     Select em
  361.       Case CxAppear
  362.         Gosub _appear
  363.       Case CxDisAppear
  364.             Gosub _disappear
  365.         End Select
  366.  
  367. The functions merely return the ID value associated with that particular
  368. Commodities Exchange message.
  369.  
  370.  
  371. Functions: ExchangeAppear/ExchangeDisAppear/ExchangeEnable/
  372. ExchangeDisable/ExchangeKill/ExchangeChangeList/ExchangeUnique
  373. --------------------------------------------------------------------------
  374.  
  375. Modes : Amiga
  376.  
  377. To be used in conjunction with ExchangeMessage, ie
  378.  
  379.     em.l=ExchangeMessage
  380.     If em
  381.       If ExchangeAppear then Gosub _appear
  382.       If ExchangeDisAppear then Gosub _dispappear
  383.     EndIf
  384.  
  385. This is intended as an alternative way of acting upon Exchange Messages.
  386.  
  387.  
  388. ;------------------------------
  389. ;- WB library version 0.9     -
  390. ;- ©1994 Reflective Images    -
  391. ;------------------------------
  392.  
  393.  WB COMMANDS 
  394.  
  395. This small library provides quick and easy to use commands for accessing
  396. AppWindows, AppIcons and AppMenus.
  397.  
  398. * PLEASE NOTE * 
  399. This library must have at least V37+ of Workbench/DOS/Icon libraries
  400.  
  401. This version of the library only enables you to read the FIRST file
  402. dragged to an AppWindow/AppIcon or selected from an AppMenu - future
  403. versions will have additional commands AppWindowArg/AppIconArg/
  404. AppMenuArg which returns the filename of the specified arg. E.g. 
  405. f$=AppIconArg(1)
  406.  
  407.  
  408.                                 The WB commands:
  409.  
  410.                  APPEVENT       
  411.                  APPWINDOWEVENT 
  412.                  APPICONEVENT   
  413.                  APPMENUEVENT   
  414.                  ADDAPPWINDOW   
  415.                  ADDAPPICON     
  416.                  ADDAPPMENU     
  417.                  DELAPPWINDOW   
  418.                  DELAPPICON     
  419.                  DELAPPMENU     
  420.                  APPWINDOWFILE  
  421.                  APPICONFILE    
  422.                  APPICONHIT     
  423.                  APPMENUFILE    
  424.                  APPMENUHIT     
  425.  
  426.  
  427. Function : AppEvent
  428. --------------------------------------------------------------------------
  429. Modes  : Amiga
  430. Syntax : status=AppEvent
  431.  
  432. This command checks the msg ports of any open AppIcons/AppWindows/
  433. AppMenus and if an event has been passed, returns -1. 0 indicates no 
  434. event has occurred.
  435.  
  436. e.g.
  437.     Repeat
  438.       VWait
  439.     Until AppEvent
  440.  
  441.  
  442. Function : AppWindowEvent
  443. --------------------------------------------------------------------------
  444. Modes  : Amiga
  445. Syntax : status=AppWindowEvent
  446.  
  447. This command checks the msg ports of any open AppWindows and if an event
  448. has been passed, returns -1. 0 indicates no event has occurred.
  449.  
  450. e.g.
  451.     Repeat
  452.       VWait
  453.     Until AppWindowEvent
  454.  
  455.  
  456. Function : AppIconEvent
  457. --------------------------------------------------------------------------
  458. Modes  : Amiga
  459. Syntax : status=AppIconEvent
  460.  
  461. This command checks the msg ports of any AppIcons and if an event has 
  462. been passed, returns -1. 0 indicates no event has occurred.
  463.  
  464. e.g.
  465.     Repeat
  466.       VWait
  467.     Until AppIconEvent
  468.  
  469.  
  470. Function : AppMenuEvent
  471. --------------------------------------------------------------------------
  472. Modes  : Amiga
  473. Syntax : status=AppMenuEvent
  474.  
  475. This command checks the msg ports of any AppMenus and if an event has 
  476. been passed, returns -1. 0 indicates no event has occurred.
  477.  
  478. e.g.
  479.     Repeat
  480.       VWait
  481.     Until AppMenuEvent
  482.  
  483.  
  484. Function : AddAppWindow
  485. --------------------------------------------------------------------------
  486. Modes  : Amiga
  487. Syntax : success=AddAppWindow(windownumber)
  488.  
  489. This command attempts to make the window specified by 'windownumber' to 
  490. become an AppWindow. -1 means success, 0 means failure. There is a 
  491. currently limit of 4 AppWindows.
  492.  
  493.  
  494. Function : AddAppIcon
  495. --------------------------------------------------------------------------
  496. Modes  : Amiga
  497. Syntax : success=AddAppIcon(id,text$,iconname$)
  498.  
  499. This command attempts to place an AppIcon onto the Workbench desktop.
  500. ID is a unique identification number. Text$ is text to display 
  501. underneath the AppIcon and Iconname$ is the name of the file to use the
  502. Icon imagery. -1 means success, 0 means failure.
  503.  
  504. e.g.
  505.     suc=AddAppIcon(0,"Test","Work:Test")
  506.     If suc=0 Then End
  507.  
  508.  
  509. Function : AddAppMenu
  510. --------------------------------------------------------------------------
  511. Modes  : Amiga
  512. Syntax : success=AddAppMenu(id,text$)
  513.  
  514. This command tries to add 'text$' to the Tools menu of Workbench.
  515. ID is a unique identification number. Returns -1 for success, 0 for 
  516. failure. 
  517.  
  518. e.g.
  519.     suc=AddAppMenu(0,"Blitz2")
  520.     If suc=0 Then End
  521.  
  522.  
  523.  
  524. Function : AppWindowFile
  525. --------------------------------------------------------------------------
  526. Modes  : Amiga
  527. Syntax : filename$=AppWindowFile(windownumber)
  528.  
  529. This command returns the complete path of the file which was dragged to 
  530. the AppWindow. If the file was in fact a directory a '/' is appended.
  531. An empty string signifies nothing was Dragged.
  532.  
  533.  
  534. Function : AppIconFile
  535. --------------------------------------------------------------------------
  536. Modes  : Amiga
  537. Syntax : filename$=AppIconFile(id)
  538.  
  539. This command returns the complete path of the file which was dragged to 
  540. the AppIcon. If the file was in fact a directory a '/' is appended.
  541. An empty string signifies nothing was Dragged.
  542.  
  543.  
  544. Function : AppMenuFile
  545. --------------------------------------------------------------------------
  546. Modes  : Amiga
  547. Syntax : filename$=AppMenuFile(id)
  548.  
  549. This command returns the complete path of the file which was selected 
  550. when the AppMenu was hit. If the file was in fact a directory a '/' is 
  551. appended. An empty string signifies nothing was selected.
  552.  
  553.  
  554. Function : AppIconHit
  555. --------------------------------------------------------------------------
  556. Modes  : Amiga
  557. Syntax : status=AppIconHit(id)
  558.      idnumber=AppIconHit
  559.  
  560. This command returns the status of the AppIcon <id>. -1 = The icon was
  561. doubleclicked, 0 = nothing has happened.
  562.  
  563. If no argument is supplied, the function returns the number of the
  564. doubleclicked icon, or -1 for none.
  565.  
  566.  
  567. Function : AppMenuHit
  568. --------------------------------------------------------------------------
  569. Modes  : Amiga
  570. Syntax : status=AppMenuHit(id)
  571.      idnumber=AppMenuHit
  572.  
  573. This returns the status of the AppMenu item <id>. -1 = This menu
  574. item was selected, 0 = This menu item was not selected.
  575. If no argument is given, the function returns the numbe of the
  576. selected menu item, or -1 for none.
  577.  
  578.  
  579. Function : DelAppWindow/DelAppIcon/DelAppMenu
  580. --------------------------------------------------------------------------
  581. Modes  : Amiga
  582. Syntax : success=DelAppWindow[(number)]
  583.      success=DelAppIcon[(id)]
  584.      success=DelAppMenu[(id)]
  585.  
  586. These commands will remove the AppWindow/AppIcon/AppMenu from the system
  587. and free up the associated message ports.
  588.  
  589. *** IMPORTANT *** You must call DelAppWindow BEFORE closing a window,
  590. or your machine will GURU!
  591.  
  592.  
  593.             Reflective Images Tooltypes Library
  594.             ===================================
  595.  
  596.                                    Release #2
  597.  
  598.  TOOLTYPES COMMANDS 
  599.  
  600. By Stephen McNamara, inspired by the collection of tooltype functions by
  601. Mark Tiffany.
  602.  
  603. (c)1994 Reflective Images
  604.  
  605. This library contains commands to allow the reading, comparing and 
  606. setting of tooltypes in a .info file.  All tooltype names are case 
  607. insignificant but as a general sort of rule they should really be 
  608. completely uppercase.
  609.  
  610. This library attempts to open the system Icon.library, if the opening of
  611. this library fails ALL commands in this library will be unusable.  
  612. Almost every function in this library relies on the Icon.library 
  613. completely.
  614.  
  615. Changed commands: 
  616.  
  617. FindToolValue - now returns "" if the tooltype was found but did not 
  618.                 have a value (e.g. DONOTWAIT).  You should now use
  619.                 FindToolType to check for the existance of a tooltype 
  620.                 and then use FindToolValue to get its value.
  621.  
  622. PutIconObject - now has an optional parameter that lets you set the type
  623.                 of the file.  See SetIconType for more information
  624.                 about possible values for this command.
  625.  
  626.  
  627. Command list:
  628.                  GETICONOBJECT   
  629.                  PUTICONOBJECT   
  630.                  FREEICONOBJECT  
  631.                  FINDTOOLVALUE   
  632.                  FINDTOOLNUMBER  
  633.                  ICONDEFAULTTOOL 
  634.                  ICONRENDER      
  635.                  MATCHTOOLVALUE  
  636.                  SETICONHIT      
  637.                  SETICONTYPE     
  638.                  SETTOOLVALUE    
  639.                  SHAPETOICON     
  640.                  NEWTOOLTYPE     
  641.                  CLEARTOOLTYPES  
  642.                  =FINDTOOLTYPE   
  643.  
  644.  
  645.  
  646. Statement: SetIconHit
  647. --------------------------------------------------------------------------
  648. Modes  : Amiga
  649. Syntax : SetIconHit width#,height#
  650.  
  651. This command sets the size of the 'hit-box' around the image in the
  652. currently loaded .info file.  This is only of use if your info file has 
  653. an image associated with it.  You should note that the hit box should 
  654. never be smaller, horizontally or vertically, than the actual size of 
  655. the image.
  656.  
  657. When Workbench renders an image for a file onto a window, it 
  658. automatically puts a 3d box border around it. The size of the hit box
  659. determines the size of this border.  Your image will always be located 
  660. in the top left border of the hit box.
  661.  
  662.  
  663. Statement: ShapeToIcon
  664. --------------------------------------------------------------------------
  665. Modes  : Amiga
  666. Syntax : ShapeToIcon shape#[,shape#]
  667.  
  668. This command lets you change the images associated with the currently
  669. loaded .info file.  What it does is to set up the .info file in memory 
  670. so that when it is saved out next, the images you give are saved out 
  671. with it. 
  672.  
  673. Using this command does not actually copy any shape data around memory, 
  674. all it does it place a pointer in the .info to the shape data. You 
  675. should therefore not delete a shape WITHOUT first saving the .info file
  676. to disk (that is of course if you want to keep your changes).
  677.  
  678. When you use this command, the hit box area for the .info file is
  679. automatically set to the size of the first shape given.  It is 
  680. important, therefore, that the second shape is not larger than the 
  681. first. When you give a second shape, this shape is set up to be the 
  682. 'alternate render' image, this means that this is the second image 
  683. associated with the .info file (remember the two windows in the 
  684. IconEditor?)
  685.  
  686.  
  687. Statement: SetIconType
  688. --------------------------------------------------------------------------
  689. Modes  : Amiga
  690. Syntax : SetIconType type#
  691.  
  692. This command lets you specify the type of the file associated with the
  693. currently loaded .info file.  The type describes whether or not the file
  694. is a tool or project etc...., and can take the following values:
  695.  
  696.             1    Disk
  697.             2    Drawer
  698.             3    Tool
  699.             4    Project
  700.             5    Trashcan
  701.  
  702. This command is identical to the menu in the IconEditor 'Type'.
  703.  
  704.  
  705. Statement: IconRender
  706. --------------------------------------------------------------------------
  707. Modes  : Amiga
  708. Syntax : IconRender mode#
  709.  
  710. This command lets you specify what Workbench should do to the icons
  711. image when the user clicks on it.  It lets you choose whether a separate
  712. image should be displayed or whether the current image should just be
  713. modified.  Mode# is made up of several different values that should be
  714. added together to create different effects, these are:
  715.  
  716.             0    Complement the select box
  717.             1    Draw a box around the image
  718.             2    Draw the alternate image
  719.             3    Don't highlight
  720.             4    Double image icon
  721.  
  722. Thus if you wanted an icon to change to a second image when selected, 
  723. and the icon has a second image, you would set the render to 6 (4+2).  
  724. This would mean that you had a second image (4) and that you wanted it 
  725. to be displayed when you select the icon (2).
  726.  
  727. Note: when you use ShapeToIcon with two shape numbers the IconRender is
  728. automatically set to 6.
  729.  
  730.  
  731. Statement: IconDefaultTool
  732. --------------------------------------------------------------------------
  733. Modes  : Amiga
  734. Syntax : IconDefaultTool tool$
  735.  
  736. This command lets you set the default tool for the current .info file.
  737. The default tool only applies for project files (see SetIconType) and is
  738. the program that is run when you double click the icon file (e.g. all
  739. Blitz2 source code files saved out with icons have the default tool
  740. 'Blitz2:Blitz2').
  741.  
  742. This command can be used to make a file saved out by your program
  743. double-clickable.  I have used it myself to make map files saved out 
  744. from my editor automatically load the editor when selected.
  745.  
  746.  
  747. Statement: FindToolType
  748. --------------------------------------------------------------------------
  749. Modes  : Amiga
  750. Syntax : bool=FindToolType (tool$)
  751.  
  752. This command simply returns true or false to say whether or not the 
  753. given tooltype was found in the currently loaded .info file.
  754.  
  755.  
  756. Statement/Function: GetIconObject
  757. ------------------------------------------------------------------------
  758. Modes  : Amiga
  759. Syntax : GetIconObject filename$
  760.      suc.l=GetIconObject (filename$)
  761.  
  762. This command reads in a .info file from disk.  The filename given will
  763. have '.info' added to the end of it and will be loaded into memory (chip 
  764. or fast depending on what is available for allocation) as a diskobject.
  765. Please refer to the Amiga hardware includes for information about the
  766. diskobject structure (or see your Blitz Basic Amigalibs resident file).
  767.  
  768. If used as a function, this command will return either FALSE for failure
  769. or the address of the allocated diskobject in memory.
  770.  
  771.  
  772. Statement/Function: PutIconObject
  773. ------------------------------------------------------------------------
  774. Modes  : Amiga
  775. Syntax : PutIconObject filename$
  776.      suc.l=PutIconObject (filename$)
  777.  
  778. This command takes a diskobject structure reserved and initialised by
  779. GetIconObject and saves it out to disk as a .info file for the specified
  780. file.  
  781.  
  782. All current tooltypes and values will be saved with the file. The 
  783. optional parameter allows you to set the type of the file associated
  784. with the .info file.  See SetIconType for possible values for this
  785. parameter.  Note that if you leave out this parameter the icontype will 
  786. not be changed.
  787.  
  788.  
  789. Statement/Function: FreeIconObject
  790. ------------------------------------------------------------------------
  791. Modes  : Amiga
  792. Syntax : FreeIconObject
  793.      suc.l=FreeIconObject
  794.  
  795. This command will free up the diskobject that is currently being used.
  796. It will not save out any tooltype changes and will free up the memory
  797. without ANY changes being made to the .info file loaded from disk.
  798.  
  799.  
  800. Function: FindToolValue
  801. ------------------------------------------------------------------------
  802. Modes  : Amiga
  803. Syntax : toolval$=FindToolValue(tooltype$)
  804.  
  805. This function returns the value of the selected tooltype.  The return
  806. value is a string, and is the part of the tooltype string after the "="
  807. in the tooltype entry.  The tooltype$ string that you pass can be in 
  808. either lower case or uppercase since all testing in done in uppercase, 
  809. although as a general rule, all tooltypes should be in uppercase.
  810.  
  811. This function will return a null string if the named tooltype was not
  812. found in the list of tooltypes for the file.  If the selected tooltype 
  813. did not have an actual value (e.g. DONOTWAIT) then this function will 
  814. return the string "!!".
  815.  
  816.  
  817. Function: FindToolNumber
  818. ------------------------------------------------------------------------
  819. Modes  : Amiga
  820. Syntax : toolval$=FindToolNumber(tooltype$)
  821.  
  822. This command will return the FULL tooltype string in the selected
  823. tooltype position.  If the tooltype number does not exist then "" will 
  824. be returned.
  825.  
  826.   Example:    tooltypes: "DONOTWAIT"
  827.                "CLOCKX=157"
  828.  
  829.     FindToolNumber(0) will return "DONOTWAIT"
  830.     FindToolNumber(1) will return "CLOCKX"
  831.     FindToolNumber(49) will return ""
  832.  
  833.  
  834. Function: MatchToolValue
  835. ------------------------------------------------------------------------
  836. Modes  : Amiga
  837. Syntax : suc.l=MatchToolValue(tooltype$,value$)
  838.  
  839. This command searchs the current list of tooltypes for the selected
  840. tooltype and, if found, attempts to match the values of it with the 
  841. given value.  This command uses the operating system call 
  842. MatchToolType(), it is able to cope with a tool having more than one
  843. value,
  844.  
  845.           e.g. LANGUAGE=ENGLISH|FRENCH
  846.             (the | is used to show OR, thus this tooltype
  847.              means that LANGUAGE equals ENGLISH or FRECH)
  848.         When using match toolvalue with this tooltype, TRUE will
  849.                 be returned when you use value$="ENGLISH" or "FRENCH" 
  850.                 but not (I think) both.
  851.  
  852. You should note that for this command, the case of VALUE$ is 
  853. insignificant.
  854.  
  855.  
  856. Statement/Function: SetToolValue
  857. ------------------------------------------------------------------------
  858. Modes  : Amiga
  859. Syntax : SetToolValue tooltype$,value$
  860.      suc.l=SetToolValue (tooltype$,value$)
  861.  
  862. This command will attempt to set a tooltype that is currently defined to
  863. the specified value.  When used as a function, this command will return
  864. TRUE for success or FALSE for failure, possible failures include: no 
  865. icon file loaded and tooltype not found.  When used, this command 
  866. attempts to allocate memory to store the new tooltype information in, 
  867. it does not attempt to free up the old memory allocated to the tooltype.
  868.  
  869. This means that you should keep alterations of tooltypes to a minimum.  
  870. The best way to manage tooltypes is:
  871.  
  872.         1. Open the icon
  873.         2. Read the tooltypes
  874.         3. Close the icon
  875.         4. ... do your program ...
  876.         5. Open the icon
  877.         6. Alter the tooltypes
  878.         7. Save the icon
  879.  
  880. Using this series of events, you'll keep memory usage (which will be
  881. fairly small anyway...) to the very minimum.
  882.  
  883.  
  884. Statement/Function: NewToolType
  885. ------------------------------------------------------------------------
  886. Modes  : Amiga
  887. Syntax : NewToolType tooltype$,value$
  888.      suc.l=NewToolType (tooltype$,value$)
  889.  
  890. This command allocates a new tooltype in the currently loaded .info file
  891. and sets its value.  No check is done to see is the tooltype already
  892. exists and the new tooltype is added to the end of the current list of
  893. tooltypes.
  894.  
  895.  
  896. Statement: ClearToolTypes
  897. ------------------------------------------------------------------------
  898. Modes  : Amiga
  899. Syntax : ClearToolTypes
  900.  
  901. This command is used to clear all the tooltype information from the
  902. currently loaded .info file.  It does not attempt, though, to free up 
  903. all the memory reserved to store tooltype names and values, you should
  904. therefore not used this command too many times in a row.  Once you have
  905. used this command, any attempt to read tooltype values will fail.
  906.  
  907.  
  908. ;------------------------------
  909. ;- ReqLib.library version 0.9 -
  910. ;- ©1994 Reflective Images    -
  911. ;------------------------------
  912.  
  913.  REQ COMMANDS 
  914.  
  915. The well known Req.Library for the Amiga is one of the best file 
  916. requesters around, so I wrote this small lib to enable Blitz users to 
  917. have Req requesters in their programs with the minimum of hassle.
  918.  
  919. * PLEASE NOTE * That this library must have at least v2.2 of the 
  920. Req.Library available.
  921.  
  922.  
  923. Command List:
  924.                  REQOUTPUT      
  925.                  REQFILEREQUEST 
  926.                  REQFILELOC     
  927.  
  928.                      REQ FLAGS, STRUCTURE 
  929.  
  930.  
  931. Statement: ReqOutput
  932. --------------------------------------------------------------------------
  933. Modes  : Amiga
  934. Syntax : ReqOutput windownumber
  935.  
  936. This command sets the ReqLib.library to put all requesters onto the
  937. window specified by <windownumber>. If this command is not called
  938. then the requesters will appear on the Default Public Screen.
  939.  
  940.  
  941. Function: ReqFileRequest
  942. --------------------------------------------------------------------------
  943. Modes :  Amiga Syntax :  pathname$=ReqFileRequest([title$[,flags]])
  944.  
  945. This opens up the standard file requester. If <title$> is given then
  946. the text will appear on the requester title bar.
  947. The optional <flags> parameter specifies a flag setting (see below)
  948. for use. If this is omitted then the last flag setting is used.
  949.  
  950.  
  951. Function: ReqFileLoc
  952. ------------------------------------------------------------------
  953. Modes  : Amiga/Blitz
  954. Syntax : memorylocation.l=ReqFileLoc
  955.  
  956. This simply returns the address in memory where the Req.Library file 
  957. requester stucture is located.
  958.  
  959.  
  960. FLAGS
  961. =====
  962.  
  963. Below is a list of possible flag settings and a brief description of each.
  964.  
  965.  
  966. #FRQSHOWINFOB     = %1   ;Set to show .info files. Default is not.
  967. #FRQEXTSELECTB    = %10   ;Extended select.  Default is not.
  968. #FRQCACHINGB      = %100   ;Directory caching.  Default is not.
  969. #FRQGETFONTSB     = %1000   ;Font requester rather than a file requester.
  970. #FRQINFOGADGETB   = %10000   ;Hide-info files gadget.
  971. #FRQHIDEWILDSB    = %100000   ;DON'T want 'show' and 'hide' string gadgets.
  972. #FRQABSOLUTEXYB   = %1000000   ;Use absolute x,y positions rather than centering on mouse.
  973. #FRQCACHEPURGEB   = %10000000   ;Purge the cache whenever the directory date stamp changes if this is set.
  974. #FRQNOHALFCACHEB  = %100000000   ;Don't cache a directory unless it is completely read in when this is set.
  975. #FRQNOSORTB       = %1000000000   ;DON'T want sorted directories.
  976. #FRQNODRAGB       = %10000000000  ;DON'T want a drag bar and depth gadgets.
  977. #FRQSAVINGB       = %100000000000  ;Are selecting a file to save to.
  978. #FRQLOADINGB      = %1000000000000  ;Are selecting a file(s) to load from.
  979. #FRQDIRONLYB      = %10000000000000  ;Allow the user to select a directory, rather than a file.
  980.  
  981.  
  982. STRUCTURE
  983. =========
  984.  
  985. Below is a description of the Req.Library file requester structure.
  986.  
  987. STRUCTURE    AFileRequester,0
  988.     UWORD    frq_VersionNumber        ;MUST BE REQVERSION!!!!!!!!!!!!!!!!!!
  989.  
  990.     ;You will probably want to initialize these three variables.
  991.     APTR    frq_Title        ; Hailing text
  992.     APTR    frq_Dir            ; Directory array (must be DSIZE+1 characters long)
  993.     APTR    frq_File        ; Filename array (must be FCHARS+1 characters long)
  994.                     ; If you initialize this variable then the file requester will place the complete path name in here on exit.
  995.     APTR    frq_PathName        ; Complete path name array - (must be DSIZE+FCHARS+2 long)
  996.                     ; If you want the file requester to pop up on your custom screen, put one of your window pointers here.
  997.                     ; Or better yet, you can leave this field zeroed and put a pointer to one of your windows in the
  998.                     ; pr_WindowPtr field in your process structure.
  999.     APTR    frq_Window        ; Window requesting or NULL
  1000.                     ; Initialize these to the number of lines and columns you want to appear in the inner window that
  1001.                     ; displays the file names.  If you leave these set to zero then default values will be used.
  1002.     UWORD    frq_MaxExtendedSelect    ; Zero implies a maximum of 65535, as long as FRQEXTSELECT is set.
  1003.     UWORD    frq_numlines        ; Number of lines in file window.
  1004.     UWORD    frq_numcolumns        ; Number of columns in file window.
  1005.     UWORD    frq_devcolumns        ; Number of columns in device window.
  1006.     ULONG    frq_Flags        ; Various - umm - flags.  See above for more info.
  1007.     UWORD    frq_dirnamescolor    ;These five colors will all default
  1008.     UWORD    frq_filenamescolor    ;to color one if you don't specify
  1009.     UWORD    frq_devicenamescolor    ;a color (ie; if you specify color zero).
  1010.     UWORD    frq_fontnamescolor    ;If you want color zero to be used, specify
  1011.     UWORD    frq_fontsizescolor    ;color 32, or some other too large number
  1012.                     ;which mods down to zero.
  1013.  
  1014.     UWORD    frq_detailcolor        ;If both of these colors are specified as
  1015.     UWORD    frq_blockcolor        ;zero then the block pen will be set to one.
  1016.  
  1017.     UWORD    frq_gadgettextcolor    ;The color for the text of the five boolean gadgets.  Defaults to 1.
  1018.     UWORD    frq_textmessagecolor    ;The color for the message at the screen top.  Defaults to 1.
  1019.     UWORD    frq_stringnamecolor    ;The color for the words Drawer, File, Hide and Show.  Defaults to 3.
  1020.     UWORD    frq_stringgadgetcolor    ;The color for the borders of the string gadgets.  Defaults to 3.
  1021.                     ;Unfortunately it is not possible to specify
  1022.                     ;the color of the actual text in an Intuition
  1023.                     ;string gadget.
  1024.     UWORD    frq_boxbordercolor    ;The color for the boxes around the file and directory areas.  Defaults to 3.
  1025.     UWORD    frq_gadgetboxcolor    ;The color for the boxes around the five boolean gadgets.  Defaults to 3.
  1026.  
  1027.     STRUCT    frq_RFU_Stuff,36    ;This area, which is reserved for
  1028.                     ;future use, should all be zero.
  1029.  
  1030.     STRUCT    frq_DirDateStamp,ds_SIZEOF    ; A copy of the cached directories date stamp.
  1031.                         ; There should never be any need to change this.
  1032.  
  1033.     UWORD    frq_WindowLeftEdge;    ;These two fields are only used when the
  1034.     UWORD    frq_WindowTopEdge;    ;FRQABSOLUTEXY flag is set.  They specify
  1035.                     ;the location of the upper left hand
  1036.                     ;corner of the window.
  1037.  
  1038.     UWORD    frq_FontYSize        ;These fields are used to return the selected
  1039.     UWORD    frq_FontStyle        ;font size and style, only applicable when the
  1040.                     ;font bit is set.
  1041.  
  1042.                     ;If you set the extended select bit and the user extended selects, the list of filenames will start from here.
  1043.     APTR    frq_ExtendedSelect    ; Linked list of ESStructures if more than one filename is chosen.
  1044.                     ;All of the following variables you shouldn't need to touch.  They contain fields that the file
  1045.                     ;requester sets and likes to preserve over calls, just to make life easier for the user.
  1046.     STRUCT    frq_Hide,WILDLENGTH+2    ; Wildcards for files to hide.
  1047.     STRUCT    frq_Show,WILDLENGTH+2    ; Wildcards for files to show.
  1048.     WORD    frq_FileBufferPos    ; Cursor's  position  and first
  1049.     WORD    frq_FileDispPos        ; displayed character number in
  1050.     WORD    frq_DirBufferPos    ; the three string gadgets.  No
  1051.     WORD    frq_DirDispPos        ; need  to initialized these if
  1052.     WORD    frq_HideBufferPos    ; you don't want to.
  1053.     WORD    frq_HideDispPos
  1054.     WORD    frq_ShowBufferPos
  1055.     WORD    frq_ShowDispPos
  1056.  
  1057. ; The  following  fields are PRIVATE!  Don't go messing with them or
  1058. ; wierd  things may/will happen.  If this isn't enough of a warning, go read
  1059. ; the one in intuition.h, that should scare you off.
  1060.  
  1061.     APTR    frq_Memory            ; Memory allocated for dir entries.
  1062.     APTR    frq_Memory2            ; Used for currently hidden files.
  1063.     APTR    frq_Lock            ; Contains lock on directories being read across calls.
  1064.     STRUCT    frq_PrivateDirBuffer,DSIZE+2    ; Used for keeping a record of which
  1065.                         ; directory we have file names for.
  1066.     APTR    frq_FileInfoBlock
  1067.     WORD    frq_NumEntries
  1068.     WORD    frq_NumHiddenEntries
  1069.     WORD    frq_filestartnumber
  1070.     WORD    frq_devicestartnumber
  1071.     LABEL    frq_SIZEOF
  1072.  
  1073. Enjoy!
  1074.  
  1075. Steve.
  1076.  
  1077.  
  1078.  
  1079.             PCF Library - Picture Crunch Format
  1080.             ===================================
  1081.  
  1082.                    -Brought to you by FUNdamental-
  1083.  
  1084.  PCF COMMANDS 
  1085.  
  1086. About This Archive
  1087. ------------------
  1088.  
  1089.     This archive contains:
  1090.  
  1091.         o A new library of commands for Blitz Basic 2
  1092.         o A compiled blitz program to generate PCF files
  1093.           from IFF files
  1094.         o A Blitz Basic and ASCII version of the same demo
  1095.                   program, to show use of the commands
  1096.             o A pre-converted image
  1097.         o This file 8)
  1098.  
  1099. All coding was written by Nigel Hughes, with a thank you to Steve from 
  1100. Reflective Images for his help with AllocDosObject and addressing 
  1101. objects in libraries. Not to mention the excellent RIB libraries.
  1102.  
  1103. About PCF Format
  1104. ----------------
  1105.  
  1106. On the Blitz mailing list, there was a call for a method of protecting
  1107. graphics from the "general public" I responded by saying, 
  1108.  
  1109.     "Use my library"
  1110.  
  1111. And then disappeared to prepare for my finals! Well the finals are over
  1112. and so here is version one of the PCF Library, version 2 will be out 
  1113. soon, more details later.
  1114.  
  1115. PCF is more compact graphics file format, that cannot be read by any
  1116. general release paint package. There are commands within the library 
  1117. to cache these pictures and decompress to a bitmap only when you need 
  1118. them. Later versions will enable a coder to add his own personal tag
  1119. so only he/she can decrypt the file. 
  1120.  
  1121. Making a PCF Picture
  1122. --------------------
  1123.  
  1124. In order to turn a IFF ILBM picture into a PCF file one need only use 
  1125. the picture_crunch program supplied in the archieve. Click on the "Load 
  1126. N Crunch" button to load an IFF and convert it to a PCF file. You will
  1127. be asked if you wish to generate a V 1.0 file or the latest format. 
  1128. Please only select the "Latest Format" option as V1.0 is reserved for 
  1129. my use only and is protected and cannot be decrypted by any one else!
  1130.  
  1131. One can only use the Display gadgets once a IFF picture has been 
  1132. crunched, this is a bug that will be fixed in later versions. Sorry.
  1133.  
  1134. The Library
  1135. -----------
  1136.  
  1137. The library can be installed either by copying "PCF_Lib.obj" to your 
  1138. BlitzLibs:Userlibs directory and then selecting "RELOAD ALL LIBS" in the 
  1139. COMPILER menu in BB2, or by using the MakeDefLibs program after copying 
  1140. "PCF_LIb.obj" to your BlitzLibs:Userlibs directory.
  1141.  
  1142.  
  1143.  
  1144.                 PCF Commands:
  1145.  
  1146.                  CACHEPCF     
  1147.                  FREEPCFCACHE 
  1148.                  LOADPCF      
  1149.                  UNPACKPCF    
  1150.                  PCFDEPTH     
  1151.                  PCFHEIGHT    
  1152.                  PCFINFO      
  1153.                  PCFVERSION   
  1154.                  PCFWIDTH     
  1155.  
  1156.                  OTHER INFO   
  1157.  
  1158.  
  1159.  
  1160. Function : CachePCF
  1161. --------------------------------------------------------------------------
  1162. Modes:  Amiga
  1163. Syntax: cache_ptr.l=CachePCF (Filename$,Memory Type,Cache Length)
  1164.  
  1165. The function loads a PCF file into memory, returning the pointer to
  1166. the cache. The Cache Length variable will contain the length of the 
  1167. cache and is needed in order to use the FreePCFCache command. This 
  1168. command does not cause the PCF image to be displayed.
  1169.  
  1170. If anything goes wrong during the loading of the file, no memory
  1171. will be allocated and 0 will be returned.
  1172.  
  1173. See Also:  FREEPCFCACHE , LOADPCF , UNPACKPCF 
  1174.  
  1175.  
  1176. Statement: FreePCFCache
  1177. --------------------------------------------------------------------------
  1178. Modes:  Amiga/Blitz
  1179. Syntax: FreePCFCache cache_ptr,cache_length
  1180.  
  1181. Frees the memory used by the PCF cache.
  1182.  
  1183. See Also:  CACHEPCF 
  1184.  
  1185.  
  1186. Statement: UnpackPCF
  1187. --------------------------------------------------------------------------
  1188. Modes:    Amiga/Blitz
  1189. Syntax: UnpackPCF Bitmap#,Palette#,cache_ptr
  1190.  
  1191. Decompresses a PCF cache to a bitmap and palette. Both objects must 
  1192. already exist. The PCF library currently makes no attempt to check the 
  1193. bitmap or the palette are deep enough. If the bitmap is too large then 
  1194. the image WILL be corrupt. The statement checks the version of PCF Cache
  1195. to ensure that it can decompress it!
  1196.  
  1197. See Also:  CACHEPCF ,  LOADPCF 
  1198.  
  1199.  
  1200. Statement: LoadPCF
  1201. --------------------------------------------------------------------------
  1202. Modes:     Amiga
  1203. Syntax: LoadPCF Bitmap#,Palette#,cache_ptr
  1204.  
  1205. Loads and decompresses a PCF image straight into the bitmap and palette. 
  1206. The image is NOT cached afterwards. The same restriction apply to this 
  1207. command as to UnpackPCF
  1208.  
  1209. See Also:  CACHEPCF ,  UNPACKPCF 
  1210.  
  1211.  
  1212. Statement: PCFInfo
  1213. --------------------------------------------------------------------------
  1214. Modes: Amiga/Blitz
  1215. Syntax: PCFInfo cache_ptr
  1216.  
  1217. Enables the use of PCFWidth, PCFHeight, PCFDepth, PCFVersion. These 
  1218. commands will all return the relevant details about the cache pointed to
  1219. by cache_ptr. This allows a programmer to ensure that the destination 
  1220. bitmap and palette are of the correct dimensions.
  1221.  
  1222. See Also:  PCFWIDTH ,  PCFHEIGHT ,  PCFDEPTH ,  PCFVERSION 
  1223.  
  1224.  
  1225. Function: PCFVersion
  1226. --------------------------------------------------------------------------
  1227. Modes: Amiga/Blitz
  1228. Sytax: v.l=PCFVersion
  1229.  
  1230. Returns the version of the last cache interogated by PCFInfo.
  1231.  
  1232.  
  1233. Function: PCFWidth
  1234. --------------------------------------------------------------------------
  1235. Modes: Amiga/Blitz
  1236. Sytax: v.l=PCFWidth
  1237.  
  1238. Returns the width of the last cache interogated by PCFInfo.
  1239.  
  1240.  
  1241. Function: PCFHeight
  1242. --------------------------------------------------------------------------
  1243. Modes: Amiga/Blitz
  1244. Sytax: v.l=PCFHeight
  1245.  
  1246. Returns the height of the last cache interogated by PCFInfo.
  1247.  
  1248.  
  1249. Function: PCFDepth
  1250. --------------------------------------------------------------------------
  1251. Modes: Amiga/Blitz
  1252. Sytax: v.l=PCFDepth
  1253.  
  1254. Returns the number of bitplanes of the last cache interogated by 
  1255. PCFInfo.
  1256.  
  1257.  
  1258. Performence
  1259. -----------
  1260.  
  1261. The UnpackPCF command can decompress a 320x256 by 256 colour image
  1262. in under 10/50 of a second. For an image of 5 bitplanes or lower,
  1263. the command can often decompress in under a frame.
  1264.  
  1265. The PCF file format itself is usually about 1k smaller than the
  1266. related IFF file. This ratio will be much improved in the next
  1267. version.
  1268.  
  1269. The Futre
  1270. ---------
  1271.  
  1272. I have a HUGE list of things to do, I just really wanted to get this
  1273. out to the general public so people can tell me what they think (wince).
  1274. But futre enhancements will include...
  1275.  
  1276.     o A PackIFF type command
  1277.     o Improved Compression rate
  1278.     o Unique key for decompression
  1279.     o Multiple file types, including Shapes
  1280.     o Multiple files in one PCF file.
  1281.  
  1282. Any bugs etc please contact FUNdamental at
  1283.  
  1284.     Nigel Hughes
  1285.     2 Slimmons Drive
  1286.     St. Albans
  1287.     Herts
  1288.     AL4 9AS
  1289.  
  1290. Until the 23rd Of June at nlh1@k.ac.aber, and after
  1291. that via Mike Richards at mhr@k.ac.aber. 
  1292.  
  1293. Right, it is 1:05 AM and I am going to bed...
  1294.  
  1295. Nigel Hughes.
  1296.  
  1297.  BACK TO MAIN 
  1298.  
  1299.  
  1300.  
  1301.  
  1302.                 PACK Library v0.1
  1303.                 =================
  1304.  
  1305.         By Stephen McNamara with a little help from Steve Matty
  1306.         (c)1994 Reflective Images
  1307.  
  1308.  PACK COMMANDS 
  1309.  
  1310. This library contains commands for the unpacking of ILBM's (IFF 
  1311. pictures) and the grabbing of their palettes (CMAP chunks).  Nearly all 
  1312. the commands in this library can be used as either STATEMENTS or 
  1313. FUNCTIONS.  
  1314.  
  1315. Usage is identical in both cases but if used as a function then the 
  1316. command will return:
  1317.  
  1318.         FALSE for failure
  1319.         TRUE for success
  1320.  
  1321. Please feel free to critisise (or praise!) this library, send me 
  1322. anything you want to say about it at:
  1323.  
  1324.             Stephen McNamara,
  1325.               17 Mayles Road,
  1326.                     Southsea,
  1327.                   Portsmouth,
  1328.                    Hampshire,
  1329.                      England.
  1330.                      PO4 8NP.
  1331.     Telephone: (England) 0705 781507.
  1332.  
  1333. Or send us anything you've written........
  1334.  
  1335.  
  1336.          These are all the PACK library commands:
  1337.  
  1338.                  DEICE        
  1339.                  ILBMGRAB     
  1340.                  ILBMPALETTE  
  1341.                  LOADIFF      
  1342.                  =LOADIFF     
  1343.                  UNPACKIFF    
  1344.                  =CHUNKHEADER 
  1345.                  =DEICE       
  1346.                  =ILBMPALETTE 
  1347.                  =UNPACKIFF   
  1348.  
  1349.  
  1350.  
  1351. Statement/Function: UnpackIFF
  1352. --------------------------------------------------------------------------
  1353. Modes : Amiga/Blitz
  1354. Syntax: UnpackIFF address.l,bitmap#[,lines]
  1355.     suc=UnpackIFF (address.l,bitmap#[,lines])
  1356.  
  1357. This command is used to unpack an IFF picture file from memory onto a
  1358. bitmap.  Address.l should point to the START of the iff file header in
  1359. memory (either CHIP or FAST mem can be used), bitmap should be the 
  1360. number of a previously initialised bitmap.  The optional lines parameter
  1361. allows you to specify the number of lines to unpack from the IFF file.
  1362.  
  1363. This command checks the size of the bitmap against the size of the IFF
  1364. before it unpacks the IFF onto it.  Checks are made for width, height 
  1365. and depth of the bitmap and the IFF and the following is done:
  1366.  
  1367. (size=WIDTH, HEIGHT and DEPTH)
  1368.  
  1369.         BITMAP 'size' < IFF 'size' : unpack aborted
  1370.         BITMAP 'size' = IFF 'size' : pic is unpacked
  1371.         BITMAP 'size' > IFF 'size' : pic is unpacked
  1372.  
  1373.   Extra aborts can be caused by:
  1374.         - not using a previously installed bitmap
  1375.         - given the optional lines parameter as 0 or less
  1376.         - not giving ADDRESS.l as a pointer to a valid IFF ILBM
  1377.           header
  1378.  
  1379. When using the optional parameter, you should note that if you try to
  1380. unpack more lines than the IFF has, the unpack routine will 
  1381. automatically stop at the last line of the IFF.  It will not reject the 
  1382. UnpackIFF command.
  1383.  
  1384. NOTE: you should save your IFF pictures with the STENCIL OFF because at
  1385. the moment this routine does not check to see if STENCIL data is present
  1386. in the IFF file.
  1387.  
  1388.  
  1389. Statement/Function: ILBMPalette
  1390. --------------------------------------------------------------------------
  1391. Modes : Amiga/Blitz
  1392. Syntax: ILBMPalette address.l,palette#
  1393.     suc=ILBMPalette (address.l,palette#)
  1394.  
  1395. This command is used to grab the palette from a IFF picture file held in
  1396. memory (CHIP or FAST mem).  Address.l should be given as the address of
  1397. either an IFF file in memory or a CMAP chunk in memory.  When you use 
  1398. the SAVE PALETTE command from inside an art program (e.g. DPaint) or 
  1399. from inside Blitz2, the program saves out a CMAP chunk which gives 
  1400. details about the palette.  The CMAP chunk is also saved with IFF 
  1401. picture files to give the palette of the picture.
  1402.  
  1403. This command will look at the address you gave and try and find a CMAP
  1404. chunk from the address given to address+5120.  If it finds a chunk it 
  1405. will grab the palette into the given palette object.  If the palette 
  1406. object already contains palette information then this information is 
  1407. deleted. This routine looks in the CMAP chunk and reserves the palette 
  1408. object to have the same number of colour entries.
  1409.  
  1410. This command will fail if it doesn't find a CMAP chunk.
  1411.  
  1412.  
  1413. Statment: ILBMGrab
  1414. -------------------------------------------------------------------------
  1415. Modes : Amiga/Blitz
  1416. Syntax: ILBMGrab address.l,bitmap#,palette#
  1417.  
  1418. This command lets you grab both the palette and the graphics from an IFF
  1419. picture file with just one command.  It returns to success parameter to
  1420. say whether or not it succeeded in grabbing the data, so if you need to 
  1421. know if the grabbing was successful you'll have to use the separate 
  1422. commands for grabbing palettes and graphics.
  1423.  
  1424.   NOTE: this command essentially just calls both  UNPACKIFF  and 
  1425.    ILBMPALETTE 
  1426.   so everything said about these commands is relevent for ILBMGrab.
  1427.  
  1428.  
  1429. Statment/Function: LoadIFF
  1430. -------------------------------------------------------------------------
  1431. Modes : Amiga
  1432. Syntax: LoadIFF filename$,bitmap#[,palette#]
  1433.     suc=LoadIFF (filename$,bitmap#[,palette#])
  1434.  
  1435. This command is a direct replacement for Blitz2's LoadBitmap. It is a
  1436. lot faster than Blitz's command since it loads the file into memory and
  1437. then unpacks it from there.  Thus you need to ensure that you have 
  1438. enough free memory to load the IFF into before trying to use this 
  1439. command.
  1440.  
  1441. This command is also more stable than Blitz's since it checks for the
  1442. existence of the file before trying to load it in.
  1443.  
  1444. The optional parameter allows you to load in the palette of the IFF
  1445. picture.  Refer to UnpackIFF and ILBMPalette for more information about
  1446. unpacking the graphics and grabbing the palettes.
  1447.  
  1448. IMPORTANT NOTE: to use this command you must have 
  1449. our  FUNC  library installed in your copy of Blitz2.  
  1450. Use of this command without this library will probably lead to a bad crash 
  1451. of your Amiga!
  1452.  
  1453.  
  1454. Statement/Function: DeIce
  1455. -------------------------------------------------------------------------
  1456. Modes : Amiga
  1457. Syntax: DeIce source_address,dest_address
  1458.     suc=DeIce (source_address,dest_address)
  1459.  
  1460. This is a command from my (Stephen McNamara) past.
  1461. It is used to unpack data files packed by my favourite Atari ST packer -
  1462. PACK ICE v2.40.  I've put it into Blitz because still have loads of 
  1463. files that I've packed with it.  To use it, source_address should 
  1464. (obviously) contain the address of the data, dest_address should be 
  1465. where to unpack the data to.  In the function form, this command returns
  1466. either 0 for unpack failed or -1 for success.
  1467.  
  1468. Note: The size of the data unpacked is the long 
  1469. word at source_address+8 (I think, or is it 4?) if anybody is 
  1470. interested......
  1471.  
  1472.  
  1473. Function: ChunkHeader
  1474. -------------------------------------------------------------------------
  1475. Modes : Amiga
  1476. Syntax: val.l=ChunkHeader (A$)
  1477.  
  1478. This command was put in by me (Stephen McNamara) before I realised Blitz
  1479. already had a command that does exactly the same.  I've left it in just
  1480. because I want to.  It is useful when looking through IFF files for 
  1481. chunks (e.g. ILBM, CMAP, etc.) as it gives you a longword value to look 
  1482. for in memory to find the chunk.  The string should be a four character 
  1483. string (e.g. CMAP), you'll be returned the longword value of the string.
  1484. This command does the job of the following bit of Blitz2 code:
  1485.  
  1486.         a$="CMAP"
  1487.         val.l=Peek.l(&a$)
  1488.  
  1489.  
  1490.  
  1491.                 GFX Library v0.1
  1492.                 ================
  1493.  
  1494.             By Stephen McNamara and Steve Matty
  1495.                 (c)1994 Reflective Images
  1496.  
  1497.  GFX COMMANDS 
  1498.  
  1499. This library contains commands for the control of palette objects inside
  1500. Blitz2.  These are just simple commands that allow either interrogation 
  1501. of the palette objects are modifications to the colour values contained
  1502. in them.  After changing the palette with these commands, you'll have to
  1503. do either a USE PALETTE or DISPLAYPALETTE (whichever is applicable to 
  1504. what you're doing) to make the changes come into effect on your screen.
  1505.  
  1506. Please feel free to critisise (or praise!) this library, send me 
  1507. anything you want to say about it at:
  1508.  
  1509.     SIS3149@ISVAX.PORT.AC.UK
  1510.         or
  1511.     SIS3147@ISVAX.PORT.AC.UK
  1512.  
  1513. Or send us anything you've written........
  1514.  
  1515.  
  1516.          These are all the GFX library commands:
  1517.  
  1518.                   AGAFILLPALETTE 
  1519.                   FILLPALETTE    
  1520.                   PALADJUST      
  1521.                   PALETTEINFO    
  1522.                   =PALRED        
  1523.                   =PALGREEN      
  1524.                   =PALBLUE       
  1525.                   =AGAPALRED     
  1526.                   =AGAPALGREEN   
  1527.                   =AGAPALBLUE    
  1528.  
  1529.  
  1530.  
  1531. Statement: PaletteInfo
  1532. --------------------------------------------------------------------------
  1533. Modes : Amiga/Blitz
  1534. Syntax: PaletteInfo Palette#
  1535.  
  1536. This command is used to specify the palette object that all palette
  1537. interrogations should look at.  The majority of the commands use this
  1538. palette object as the source for their data, e.g. PalRed(1) will look at
  1539. the red value of colour 1 of the palette last used in a PaletteInfo
  1540. command.
  1541.  
  1542.  
  1543. --------------------------------------------------------------------------
  1544. Modes :  Amiga/Blitz Syntax:  r.w=PalRed (Colour#)
  1545.  
  1546. This command is used to get the red value of colour number Colour#. You
  1547. should use the PaletteInfo command to specify what palette this command
  1548. takes its information from.
  1549.  
  1550. The value returned will be from 0 to 15
  1551.  
  1552.  
  1553. Function: PalGreen
  1554. -------------------------------------------------------------------------
  1555. Modes : Amiga/Blitz
  1556. Syntax: r.w=PalGreen (Colour#)
  1557.  
  1558. This command is used to get the green value of colour number Colour#. 
  1559. You should use the PaletteInfo command to specify what palette this 
  1560. command takes its information from.
  1561.  
  1562. The value returned will be from 0 to 15
  1563.  
  1564.  
  1565. Function: PalBlue
  1566. -------------------------------------------------------------------------
  1567. Modes : Amiga/Blitz
  1568. Syntax: b.w=PalBlue (Colour#)
  1569.  
  1570. This command is used to get the blue value of colour number Colour#. You
  1571. should use the PaletteInfo command to specify what palette this command
  1572. takes its information from.
  1573.  
  1574. The value returned will be from 0 to 15
  1575.  
  1576.  
  1577. Function: AGAPalRed
  1578. -------------------------------------------------------------------------
  1579. Modes : Amiga/Blitz
  1580. Syntax: r.w=AGAPalRed (Colour#)
  1581.  
  1582. This command is used to get the red value of colour number Colour#. You
  1583. should use the PaletteInfo command to specify what palette this command
  1584. takes its information from.
  1585.  
  1586. The value returned will be from 0 to 255, this number of shades, though,
  1587. can only be displayed on an AGA machine.
  1588.  
  1589.  
  1590. Function: AGAPalGreen
  1591. -------------------------------------------------------------------------
  1592. Modes : Amiga/Blitz
  1593. Syntax: g.w=AGAPalGreen (Colour#)
  1594.  
  1595. This command is used to get the green value of colour number Colour#.
  1596. You should use the PaletteInfo command to specify what palette this 
  1597. command takes its information from.
  1598.  
  1599. The value returned will be from 0 to 255, this number of shades, though,
  1600. can only be displayed on an AGA machine.
  1601.  
  1602.  
  1603. Function: AGAPalBlue
  1604. -------------------------------------------------------------------------
  1605. Modes : Amiga/Blitz
  1606. Syntax: b.w=AGAPalBlue (Colour#)
  1607.  
  1608. This command is used to get the blue value of colour number Colour#. You
  1609. should use the PaletteInfo command to specify what palette this command
  1610. takes its information from.
  1611.  
  1612. The value returned will be from 0 to 255, this number of shades, though,
  1613. can only be displayed on an AGA machine.
  1614.  
  1615.  
  1616. Statement: PalAdjust
  1617. -------------------------------------------------------------------------
  1618. Modes : Amiga/Blitz
  1619. Syntax: PalAdjust dest_palette#,ration.q[,start_col,end_col]
  1620.  
  1621. This command is used to multiple all the colours, or a range of colours,
  1622. in a palette object, by a ratio.  The dest_palette# arguement is used to
  1623. give a destination for the adjusted colour information.  This 
  1624. destination should be a pre-reserved palette and should be AT LEAST as 
  1625. big and the source palette.  The source palette is taken as being the 
  1626. palette last used in the PaletteInfo command.
  1627.  
  1628. The ratio should be given as either a quick value or a float and should
  1629. be below one for a fade or above to lighten a palette.  If you give a 
  1630. ratio of 1 then a palette copy will occur.
  1631.  
  1632. The optional start and end parameters let you specify the range of
  1633. colours to adjust.  Only this range of colours, though, will be adjusted
  1634. and stored in the destination palette.
  1635.  
  1636.  
  1637. Statement: FillPalette
  1638. -------------------------------------------------------------------------
  1639. Modes : Amiga/Blitz
  1640. Syntax: FillPalette palette#,r,g,b[start_col,end_col]
  1641.  
  1642. This command lets you fill a given palette object with specific r,g,b
  1643. values.  The values given should be between 0 to and 15.  Optionally, 
  1644. you can give start and end colour numbers to set a range for the fill.  
  1645. You should be careful, though, because when you specify a range, no 
  1646. checking is done (at the moment) to make sure that you don't exceed 
  1647. the colour limit of the palette.
  1648.  
  1649. You should note that this command does not work on the palette last
  1650. PaletteInfo'ed.
  1651.  
  1652.  
  1653. Statement: AGAFillPalette
  1654. -------------------------------------------------------------------------
  1655. Modes : Amiga/Blitz
  1656. Syntax: AGAFillPalette palette#,r,g,b[start_col,end_col]
  1657.  
  1658. This command is identical to  FILLPALETTE  except that it lets 
  1659. you specify AGA shade values for the r,g,b parameters.
  1660.  
  1661. See  FILLPALETTE  for more information.
  1662.  
  1663.  
  1664.  
  1665.                 FNS Library v0.992
  1666.                 ==================
  1667.  
  1668.  
  1669.                 By Stephen McNamara
  1670.                  (c)1994 Reflective Images
  1671.  
  1672.  FNS COMMANDS 
  1673.  
  1674. This Blitz2 library prints proportional fonts in either Amiga or Blitz
  1675. mode.  It uses my own (rather primitive) font file format, details of 
  1676. which can be found at the end of this text file.  Fonts can be upto 64 
  1677. pixels wide and any height (although the font editor is limited to 64 
  1678. pixels at the present moment).  Fonts can be output in upto 256 colours
  1679. (AGA!) and in the following ways: bold, centred, underlined, right-
  1680. aligned or just standard left-aligned.
  1681.  
  1682. Note: a default font (PERSONAL.8) is built into this library and can be
  1683. used by simply using font number 0.  You do not have to install this 
  1684. font, it is automatically available for your use.  A second point is to 
  1685. make is that the library is set up with a clipping rectangle of 0,0 to 
  1686. 0,0. Thus you have to use either FNSClip, FNSClipOutput or FNSOutput 
  1687. (with the optional clip parameter) to set the clipping rectangle before 
  1688. you try to print anything.
  1689.  
  1690. Please feel free to critisise (or praise!) this library, send me 
  1691. anything you want to say about it at:
  1692.  
  1693.             SIS3149@ISVAX.SIS.PORT.AC.UK
  1694.  
  1695. Or send me anything you've written........
  1696.  
  1697.  
  1698.  
  1699.             These are all the FNS library commands:
  1700.  
  1701.              INSTALLFNS       =FNSHEIGHT    
  1702.              REMOVEFNS        =FNSLENGTH    
  1703.              FNSCLIP          =FNSLOAD      
  1704.              FNSCLIPOUTPUT    =FNSSLOT      
  1705.              FNSSETTAB        =FNSUNDERLINE 
  1706.              FNSINK           =FNSVERSION   
  1707.              FNSORIGIN        =FNSWIDTH     
  1708.              FNSOUTPUT        FNSPREFS      
  1709.              FNSPRINT         FNSUNLOAD     
  1710.  
  1711.                  FNS FONT FORMAT 
  1712.  
  1713.  
  1714. Note: All return values will be words except when using InstallFNS and
  1715.       FNSVersion.
  1716.  
  1717.  
  1718.  
  1719. FNS Font file format:
  1720. =====================
  1721.  
  1722. Header: 256 bytes.
  1723.     0-3   : 'FNS.' - file identifier - looked for by InstallFNS
  1724.     4-5   : height of font (#word)
  1725.     6-7   : width of font in multiples of 16 (#word)
  1726.     8-9   : underline position (offset from top of font, #word)
  1727.     10-11 : size of data for each font character
  1728.         [ (WIDTH/8) * height ]
  1729.     32-255: byte giving widths of each character in the font.
  1730.         These bytes doesn't really hold the width, rather
  1731.         they hold the value to add to the X position of the
  1732.         character to get to the position to print the next
  1733.         character at (!).
  1734.  
  1735.     256-EOF:character data starting at ASCII 32 (space)
  1736.  
  1737.  
  1738.  
  1739. Statement: FNSSetTab
  1740. -------------------------------------------------------------------------
  1741. Modes : Amiga/Blitz
  1742. Syntax: FNSSetTab tab_width
  1743.  
  1744. Description:
  1745. Use this command to set the tab spacing used when printing. The value
  1746. given should be the spacing IN pixels.
  1747.  
  1748.  
  1749. Function: FNSLoad
  1750. --------------------------------------------------------------------------
  1751. Modes : Amiga/Blitz
  1752. Syntax: suc=FNSLoad (filename$,font#)
  1753.  
  1754. Description:
  1755. This command is used to load a font from disk and automatically install
  1756. it for use by the FNS commands.  Filename$ should be the full name of 
  1757. the file to load (path$+file$) and font# should be 0<= and >=15.  This 
  1758. command returns a value of -1 for failure or the font number the font 
  1759. was installed as (see InstallFNS).  A failure could either be a load 
  1760. error or an installation error.
  1761.  
  1762. You should make sure that the file you load IS an FNS font file.
  1763.  
  1764. IMPORTANT NOTE: to use this command, you must have 
  1765. our  FUNC library installed on your copy of Blitz2.  
  1766. Running it without this library could, and probably will, cause a major 
  1767. crash of your computer. 
  1768.  
  1769. Also note that if you do an ERASEALL (this is a  FUNC library command for
  1770. erasing banks), you will DELETE your font from memory!
  1771.  
  1772.  
  1773. Statement: FNSUnLoad
  1774. --------------------------------------------------------------------------
  1775. Modes : Amiga/Blitz
  1776. Syntax: FNSUnLoad font#
  1777.  
  1778. This command is used to remove a font installed with the FNSLoad 
  1779. command. When this command runs it automatically removes the font 
  1780. entry in the FNS commands and deletes the memory that the font file is
  1781. held in. There is no need to do this at the end of a program as the 
  1782.  FUNC library automatically frees up all allocated 
  1783. memory.
  1784.  
  1785.  
  1786.  
  1787. Function: FNSSlot
  1788. -------------------------------------------------------------------------
  1789. Modes : Amiga/Blitz
  1790. Syntax: address.l=FNSSlot
  1791.  
  1792. Steve: this command was not in the doc file.
  1793.  
  1794.  
  1795.  
  1796.  
  1797. Function: InstallFNS
  1798. -------------------------------------------------------------------------
  1799. Modes : Amiga/Blitz
  1800. Syntax: font_num.b=InstallFNS(font_num.b,address.l)
  1801.  
  1802. This is used to install a font so that it is available for use by
  1803. the output routines.  Font_num should be a number >=0 and <=15,
  1804. address should be the address in memory of the FNS font file.
  1805. This function will check that the address given does contain a FNS
  1806. font (it will look for the header 'FNS.'), if it cannot find the font
  1807. or something else goes wrong it will return a 0 to you, otherwise it
  1808. will return the number the font was installed as.
  1809.  
  1810. Note: The font number you give is automatically ANDED with $F when you
  1811.       call this function, thus if you supply a number greater that 15
  1812.       you could actually overwrite a previously installed font.
  1813.  
  1814. See:  REMOVEFNS 
  1815.  
  1816.  
  1817.  
  1818. Statement: RemoveFNS
  1819. -------------------------------------------------------------------------
  1820. Modes : Amiga/Blitz
  1821. Syntax: RemoveFNS font#
  1822.  
  1823. This command simply removes an installed font from the list of font
  1824. held internally by the FNS routines.  There is no real need to remove
  1825. fonts as installing fonts takes up no memory, except of course the 
  1826. actual font data.  You do not need to remove FNS fonts before ending a
  1827. program.
  1828.  
  1829. See:  INSTALLFNS 
  1830.  
  1831.  
  1832.  
  1833. Statement: FNSPrint
  1834. -------------------------------------------------------------------------
  1835. Modes : Amiga/Blitz
  1836. Syntax: FNSPrint font_num.b,x.w,y.w,a$/string_address
  1837.         [,preferences,colour]
  1838.  
  1839. This command prints the string a$ in an FNS font at the position X,Y.
  1840. Font_num is the number of a previously installed FNS font, the output
  1841. of this command is sent to the current FNS bitmap (see FNSOutput). You
  1842. can setting a drawing rectangle on the currently used bitmap to limit
  1843. the output of the font - see FNSClip for more info.
  1844.  
  1845. Instead of a string, though, you can give the address of a null
  1846. terminated string in memory.  Also, you can change the colour that text 
  1847. is being output in in the current string by putting the character ASCII 1
  1848. followed by a byte value from 0-255 specifying the colour to change to.
  1849.  
  1850. The optional parameters are for controlling how the text is output.
  1851. They automatically overide the default setting but are not permanent,
  1852. i.e. the default output style and colour are restored after the line
  1853. has been output.  Use FNSInk and FNSPrefs to set the default font
  1854. output mode.
  1855.  
  1856.   See:  FNSOUPUT  , FNSINK    , FNSPREFS  , FNSORIGIN , FNSCLIP   
  1857.  
  1858.  
  1859.  
  1860. Statement: FNSOutput
  1861. --------------------------------------------------------------------------
  1862. Modes : Amiga/Blitz
  1863. Syntax: FNSOutput bitmap#[,clip_update]
  1864.  
  1865. This command selects a bitmap for use by the FNS routines, the bitmap
  1866. must be a previously reserved Blitz 2 bitmap object.  After this
  1867. command all FNS font printing will occur on the selected bitmap.  The
  1868. optional parameter allows you to update the clipping rectangle for
  1869. output at the same time as setting the output bitmap.  Setting
  1870. clip_update to a non-zero value will cause the clipping area to
  1871. automatically be set to the dimensions of the selected bitmap.
  1872.  
  1873. NOTE:
  1874. -----
  1875. This command MUST be used before you attempt to use FNSPrint.
  1876. The maximum depth of the bitmap for printing is 8 bitplanes since this
  1877. is all Blitz 2 currently supports.
  1878.  
  1879. See:  FNSCLIP , FNSCLIPOUTPUT 
  1880.  
  1881.  
  1882.  
  1883. Statement: FNSInk
  1884. -------------------------------------------------------------------------
  1885. Modes : Amiga/Blitz
  1886. Syntax: FNSInk colour#
  1887.  
  1888. This sets the output colour for the FNS font drawing routines. The 
  1889. number range is dependant on the depth of the destination bitmap, the
  1890. max posible range, though, is limited to 0 to 255 colours.  The FNS
  1891. output routines will attempt to draw in all the bitplanes of the
  1892. selected bitmap, any extra bits in the ink colour will be ignored.
  1893.  
  1894. See:  FNSPREFS 
  1895.  
  1896.  
  1897.  
  1898. Statement: FNSPrefs
  1899. -------------------------------------------------------------------------
  1900. Modes : Amiga/Blitz
  1901. Syntax: FNSInk preferences[,colour#]
  1902.  
  1903. This sets the output prefs for the FNS font drawing routines but at
  1904. the same time also sets the colour for the FNS routines (optional).
  1905. At the moment the following options are available, the bits of the
  1906. preferences byte are used to select the different options:
  1907.  
  1908.                             bit 0: Centred text
  1909.                             bit 1: Bold text
  1910.                 bit 2: Underline
  1911.                 bit 3: Right aligned
  1912.  
  1913. See:  FNSINK , FNSPRINT , FNSLENGTH 
  1914.  
  1915.  
  1916.  
  1917. Function: FNSHeight
  1918. -------------------------------------------------------------------------
  1919. Modes : Amiga/Blitz
  1920. Syntax: height.w=FNSHeight(font_num)
  1921.  
  1922. This routine returns the height of a previously installed FNS font.
  1923. Font_num should be >=0 and <=15.
  1924.  
  1925. See:  FNSUNDERLINE , FNSWIDTH 
  1926.  
  1927.  
  1928.  
  1929. Function: FNSUnderline
  1930. -------------------------------------------------------------------------
  1931. Modes : Amiga/Blitz
  1932. Syntax: under_pos=FNSUnderline(font_num)
  1933.  
  1934. This routine returns the underline position of the selected FNS font.
  1935. Font_num should be >=0 and <=15.
  1936.  
  1937. See:  FNSHEIGHT , FNSWIDTH 
  1938.  
  1939.  
  1940.  
  1941. Function: FNSWidth
  1942. -------------------------------------------------------------------------
  1943. Modes : Amiga/Blitz
  1944. Syntax: width.w=FNSWidth(font_num)
  1945.  
  1946. This routine returns the width in multiples of 16 of the selected FNS
  1947. font.  Font_num should be >=0 and <=15.
  1948.  
  1949. See:  FNSHEIGHT , FNSUNDERLINE 
  1950.  
  1951.  
  1952.  
  1953. Statement: FNSClip
  1954. -------------------------------------------------------------------------
  1955. Modes : Amiga/Blitz
  1956. Syntax: FNSClip x1,y1,x2,y2
  1957.  
  1958. This command is used to limit the output of the FNSPrint command.  The
  1959. co-ordinates given should describe a rectangle that is to be used to
  1960. clip the output.  This rectangle can be thought of as a window on the
  1961. bitmap - no printing can occur outside of the window.
  1962. X1,Y1 are the top left corner of the clipping rectangle and X2,Y2 are 
  1963. the bottom right corner.  Please note that both X co-ordinates should be
  1964. multiples of 16 and that X2 should be the heightest multiple of 16 that
  1965. you do not wish output to occur at.  Thus if your bitmap is 320x256 then
  1966. you would use the following to set the clipping rectangle to the full
  1967. bitmap:
  1968.         FNSClip 0,0,320,256
  1969.  
  1970. See:  FNSCLIPOUTPUT , FNSOUTPUT 
  1971.  
  1972.  
  1973.  
  1974. Statement: FNSClipOutput
  1975. -------------------------------------------------------------------------
  1976. Modes : Amiga/Blitz
  1977. Syntax: FNSClipOutput
  1978.  
  1979. This command is used to quickly set the clipping rectangle for the FNS
  1980. commands to the full size of a bitmap.
  1981.  
  1982. See:  FNSCLIP , FNSOUTPUT 
  1983.  
  1984.  
  1985.  
  1986. Statement: FNSOrigin
  1987. -------------------------------------------------------------------------
  1988. Modes : Amiga/Blitz
  1989. Syntax: FNSOrigin [x,y]
  1990.  
  1991. This command is used to set an origin co-ordinate for printing output.
  1992. Whenever you use FNSPrint, the origin co-ordinates are added (as words)
  1993. to the co-ordinates you give for output.  I.e. setting the origin at
  1994. 100,0 and printing at co-ordinates 0,0 will cause the output to be at
  1995. 100,0.
  1996.  
  1997. Using this command without any parameters will cause the origin to
  1998. be reset to the position 0,0.
  1999. Note: This command does not affect the use of the FNSClip command.
  2000.  
  2001.  
  2002.  
  2003. Function: FNSLength
  2004. -------------------------------------------------------------------------
  2005. Modes : Amiga/Blitz
  2006. Syntax: a=FNSLength (font#,a$[,prefs])
  2007.  
  2008. This command is equivalent of the basic command a=len(a$) except that
  2009. it returns the x size, in pixels, of the string if it were to be printed
  2010. in the font font#.  The optional preferences parameter allows you to
  2011. adjust the output of the string, if you specify no preferences then this
  2012. function will use the previously selected preferences to calculate the
  2013. string length.  Using preferences allows you to account for things like
  2014. bold text output.
  2015.  
  2016. See:  FNSPREFS 
  2017.  
  2018.  
  2019.  
  2020. Function: FNSVersion
  2021. -------------------------------------------------------------------------
  2022. Modes : Amiga/Blitz
  2023. Syntax: a.q=FNSVersion
  2024.  
  2025. This command allows you to test the version number of the FNS library
  2026. that your program is being compiled with.  It returns a quick float 
  2027. value and so you should use a quick float variable for the answer.  This
  2028. doc file was written for version 0.991 of the library.
  2029.  
  2030.  
  2031. FNS Font file format:
  2032. =====================
  2033.  
  2034. Header: 256 bytes.
  2035.     0-3   : 'FNS.' - file identifier - looked for by InstallFNS
  2036.     4-5   : height of font (#word)
  2037.     6-7   : width of font in multiples of 16 (#word)
  2038.     8-9   : underline position (offset from top of font, #word)
  2039.     10-11 : size of data for each font character
  2040.         [ (WIDTH/8) * height ]
  2041.     32-255: byte giving widths of each character in the font.
  2042.         These bytes doesn't really hold the width, rather
  2043.         they hold the value to add to the X position of the
  2044.         character to get to the position to print the next
  2045.         character at (!).
  2046.  
  2047.     256-EOF:character data starting at ASCII 32 (space)
  2048.  
  2049.  
  2050.  
  2051.             Func/AMOS Library v1.0
  2052.             =================
  2053.  
  2054.             By Steven Matty
  2055.              ©1994 Reflective Images
  2056.  
  2057.  FUNC COMMANDS 
  2058.  
  2059. This library was written primarily to emulate the functions that were
  2060. present in AM*S but not in Blitz Basic 2. It began life as a load of 
  2061. Blitz Statements but was then converted to high speed 680x0. The library
  2062. will continually be expanded upon and free updates will be sent on 
  2063. request. If you decide to use any of the function please give me a 
  2064. little cred, not a lot, just something. Anyway, enough of this 
  2065. baloney....on with the command list. 
  2066.  
  2067.  
  2068.             These are all the FUNC library commands:
  2069.  
  2070.         
  2071.              CACHEOFF        =KEYCODE      
  2072.              COPYBYTE        =LENGTH       
  2073.              COPYWORD        =LISA         
  2074.              COPYLONG        =MAKEDIR      
  2075.              ERASE           =MAX          
  2076.              ERASEALL        =MEMFREE      
  2077.              FILLMEM         =MIN          
  2078.              NEXTBANK        =PLOAD        
  2079.              REBOOT          =RENAME       
  2080.              RESETTIMER      =RESERVE      
  2081.              =BLOAD          =CLUDGESHAPES 
  2082.              =BSAVE          =CLUDGESOUND  
  2083.              =FILESIZE       =START        
  2084.              =XOR            =TIMER        
  2085.  
  2086.  
  2087.  
  2088. ********************************* NOTE **************************************
  2089. * VALID BANKS RANGE FROM 0-49 INCLUSIVE. DO NOT USE A VALUE GREATER THAN 49 *
  2090. * OR IT WILL BE INTERPRETED AS AN ADDRESS RATHER THAN A BANKNUMBER          *
  2091. *****************************************************************************
  2092.  
  2093.  
  2094.  
  2095. Statement: ResetTimer
  2096. --------------------------------------------------------------------------
  2097. Mode   : Amiga/Blitz
  2098. Syntax : ResetTimer
  2099.  
  2100. This will recent the CIA timer to 0.
  2101.  
  2102.  
  2103. Statement/Function : CludgeShapes
  2104. --------------------------------------------------------------------------
  2105. Mode   : Amiga/Blitz
  2106. Syntax : [success]=CludgeShapes(shape#,numshapes,address)
  2107.  
  2108. This allows the creation of shapes through INCBIN statements. It
  2109. allocates chip memory for each shape and copies the data into this.
  2110. It does the same as LoadShapes except it grabs shapes from memory.
  2111.  
  2112.  
  2113. Statement/Function : CludgeSound
  2114. --------------------------------------------------------------------------
  2115. Mode   : Amiga/Blitz
  2116. Syntax : [success]=CludgeSound(sound#,address)
  2117.  
  2118. This does that same for CludgeShapes but works on only 1 sound at a time
  2119.  
  2120. NOTE: Looped sounds are not currently supported! The sound must be a valid
  2121. 8SVX sample.
  2122.  
  2123.  
  2124.  
  2125. Function: Reserve
  2126. --------------------------------------------------------------------------
  2127. Mode   : Amiga/Blitz
  2128. Syntax : success=Reserve(banknumber,length)
  2129.  
  2130.   This will attempt to reserve <length> bytes of memory. If succesfull,
  2131. it will return the address of the bank. If unsuccessfull, 0 is returned.
  2132. Banks are limited by the Compiler Options Menu.
  2133.  
  2134.  
  2135.  
  2136. Statement: Erase
  2137. --------------------------------------------------------------------------
  2138. Mode   : Amiga/Blitz
  2139. Syntax : Erase(banknumber)
  2140.  
  2141. The Erase command will erase the specified memory bank.
  2142.  
  2143.  
  2144.  
  2145. Statement: EraseAll
  2146. --------------------------------------------------------------------------
  2147. Mode   : Amiga/Blitz
  2148. Syntax : EraseAll
  2149.  
  2150. This command will erase ALL allocated memory banks.
  2151.  
  2152.  
  2153.  
  2154. Function: BLoad
  2155. -------------------------------------------------------------------------
  2156. Mode   : Amiga
  2157. Syntax : success=BLoad(filename$,bank/address[,length,offset])
  2158.  
  2159. If bank is specified, then the file is loaded into that bank. If address
  2160. is specified then it is loaded to the address. Valid banks are 0-49. 
  2161. If the bank does not exist, Blitz will reserve a bank for you.
  2162. If the bank does exist, Blitz will erase the bank from memory, and
  2163. allocate a new one.
  2164.  
  2165. The return result is -1 for success, or 0 for failure  (not enough RAM, 
  2166. file not exist). If offset is specified, then <length> bytes will be 
  2167. read from the specified offset position in the file.
  2168.  
  2169.  
  2170.  
  2171. Function: PLoad
  2172. -------------------------------------------------------------------------
  2173. Mode   : Amiga
  2174. Syntax : success=PLoad(filename$,bank/address)
  2175.  
  2176. This will attempt to load the executable file to the specified address.
  2177. -1 is success, 0 is failure.
  2178.  
  2179.  
  2180.  
  2181. Function: BSave
  2182. -------------------------------------------------------------------------
  2183. Mode   : Amiga
  2184. Syntax : success=BSave(filename$,bank/address,length)
  2185.  
  2186. This will save <length> bytes at bank/address to the file. Return result
  2187. is -1 for success, 0 for failure. If length > bank length then the 
  2188. length of the bank is saved instead. If 0 is specified, the entire bank 
  2189. is saved.
  2190.  
  2191.  
  2192.  
  2193. Function: Start
  2194. -------------------------------------------------------------------------
  2195. Mode   : Amiga/Blitz
  2196. Syntax : start_address.l=Start(banknumber.b)
  2197.  
  2198. This will return the start address of the specified bank. (0=no bank)
  2199.  
  2200.  
  2201.  
  2202. Function: Length
  2203. -------------------------------------------------------------------------
  2204. Mode   : Amiga/Blitz
  2205. Syntax : length_of_bank.l=Length(banknumber.b)
  2206.  
  2207. This will return the length of the specified bank in bytes. (0=No bank)
  2208.  
  2209.  
  2210.  
  2211. Function: MemFree
  2212. -------------------------------------------------------------------------
  2213. Mode   : Amiga/Blitz
  2214. Syntax : bytes.l=MemFree
  2215.  
  2216. This will return the total amount of Public Free RAM available to the
  2217. system.
  2218.  
  2219.  
  2220.  
  2221. Function: NextBank
  2222. -------------------------------------------------------------------------
  2223. Mode   : Amiga/Blitz
  2224. Syntax : bank.b=NextBank
  2225.  
  2226. This will return the number of the first available bank (-1 if none 
  2227. free).
  2228.  
  2229.  
  2230.  
  2231. Statement: FillMem
  2232. -------------------------------------------------------------------------
  2233. Mode   : Amiga/Blitz
  2234. Syntax : FillMem(address.l,length.l,value.b)
  2235.  
  2236. This will fill 'length' bytes starting from the specified address with 
  2237. 'value'.
  2238.  
  2239.  
  2240.  
  2241. Statement: CopyByte
  2242. -------------------------------------------------------------------------
  2243. Mode   : Amiga/Blitz
  2244. Syntax : CopyByte(source.l,dest.l,num.l)
  2245.  
  2246. This will copy <num> bytes from <source> to <dest> 
  2247.  
  2248.  
  2249.  
  2250. Statement: CopyWord
  2251. -------------------------------------------------------------------------
  2252. Mode   : Amiga/Blitz
  2253. Syntax : CopyByte(source.l,dest.l,num.l)
  2254.  
  2255. This will copy <num> words from <source> to <dest> 
  2256.  
  2257.  
  2258.  
  2259. Statement: CopyLong
  2260. -------------------------------------------------------------------------
  2261. Mode   : Amiga/Blitz
  2262. Syntax : CopyByte(source.l,dest.l,num.l)
  2263.  
  2264. This will copy <num> longwords from <source> to <dest> 
  2265.  
  2266.  
  2267.  
  2268. Function: MakeDir
  2269. -------------------------------------------------------------------------
  2270. Mode   : Amiga
  2271. Syntax : success=MakeDir(name$)
  2272.  
  2273. This function attempts to create a directory called <name$>
  2274. If it is unsuccessfull, 0 is returned else -1 is returned.
  2275.  
  2276.  
  2277.  
  2278. Function: Rename
  2279. -------------------------------------------------------------------------
  2280. Mode   : Amiga
  2281. Syntax : success=Rename(source$,dest$)
  2282.  
  2283. This attempts to rename the file <source$> to <dest$>
  2284.  
  2285. NOTE: It is not possible to rename across devices. -1 is returned if 
  2286. successfull, else 0.
  2287.  
  2288.  
  2289.  
  2290. Function: Timer
  2291. -------------------------------------------------------------------------
  2292. Mode   : Amiga/Blitz
  2293. Syntax : t.l=Timer
  2294.  
  2295. This will return the number of 50ths of a second since startup.
  2296.  
  2297.  
  2298.  
  2299. Function: Lisa
  2300. -------------------------------------------------------------------------
  2301. Mode   : Amiga/Blitz
  2302. Syntax : chipver=Lisa
  2303.  
  2304.    This will return the current Lisa chip version :
  2305.  
  2306.     $00 for OCS Denise
  2307.     $F7 for ECS Denise
  2308.     $F8 for AGA Lisa
  2309.  
  2310.  
  2311.  
  2312. Statement: Reboot
  2313. -------------------------------------------------------------------------
  2314. Mode   : Amiga/Blitz
  2315. Syntax : Reboot
  2316.  
  2317. This will perform a cold reboot
  2318.  
  2319.  
  2320.  
  2321. Function: FileSize
  2322. -------------------------------------------------------------------------
  2323. Mode   : Amiga
  2324. Syntax : size.l=FileSize(filename$)
  2325.  
  2326. This return the length (in bytes) of the file.
  2327.  
  2328.  
  2329. Statement: CacheOff
  2330. -------------------------------------------------------------------------
  2331. Mode   : Amiga/Blitz
  2332. Syntax : Cache Off
  2333.  
  2334. This will turn off the instruction cache of the CPU.
  2335.  
  2336.  
  2337. Function: XOR
  2338. -------------------------------------------------------------------------
  2339. Mode   : Amiga/Blitz
  2340. Syntax : x.l=XOR(x.l,y.l)
  2341.  
  2342. This will perform an Exclusive-Or operation between X and Y and put the
  2343. result back into X 
  2344. e.g
  2345.  
  2346.     x=XOR(%101,%100)
  2347.  
  2348. Will place %001 into X (%101 XOR %100 = %001)
  2349.  
  2350.  
  2351.  
  2352. Function: Max/Min
  2353. ------------------------------------------------------------------------
  2354. Mode   : Amiga/Blitz
  2355. Syntax : value=Max(first_var,second_var)
  2356.          value=Min(first_var,second_var)
  2357.  
  2358. This will compare both values and return either the Higher of the values
  2359. (Max) or the Lower (Min). This currently supports INTEGERs only.
  2360.  
  2361.  
  2362.  
  2363. Function: KeyCode
  2364. ------------------------------------------------------------------------
  2365. Mode   : Amiga/Blitz
  2366. Syntax : keycode=KeyCode
  2367.  
  2368. This will return the status of the keyboard in the form of a keycode.
  2369. You will need to experiment to find out the desired keycode for
  2370. a particular key.
  2371.  
  2372. This merely peeks address $bfec01 and returns the value found.
  2373.  
  2374.  
  2375.  
  2376.             Reflective Images Effects Library
  2377.             =================================
  2378.  
  2379.         By Stephen McNamara, with help from Steve Matty
  2380.                (c)1994 Reflective Images
  2381.  FX COMMANDS 
  2382.  
  2383. Note: The library has had a lot of the commands inside it expanded so 
  2384. that they work on any size bitmap.  At the moment the following, though,
  2385. will only work on lorez bitmaps: ZoomX8, Derez and ZoomXY
  2386.  
  2387. None of the commands in this library use the blitter chip, any blitter 
  2388. source code that anybody has please send to me.
  2389.  
  2390.  
  2391.             Here are all the FX commands:
  2392.  
  2393. Command list:
  2394.              CHUNKYTOPLANAR (SLOW)  
  2395.              CLEARBITMAP            
  2396.              DEREZ                  
  2397.              FADEINBITMAP           
  2398.              INITZOOMXY             
  2399.              PLANARTOCHUNKY (SLOW)  
  2400.              REDUCEX2           
  2401.              ZOOMXY                 
  2402.              ZOOMX2                 
  2403.              ZOOMX4                 
  2404.              ZOOMX8                 
  2405.              =ADDVALUE(BITMAP#,X,Y) 
  2406.  
  2407. No instructions for the planar<>chunky commands since their not really 
  2408. that useful at the moment.  If anybody has some working code thats good
  2409. then.......................
  2410.  
  2411.  
  2412. No instructions for the planar<>chunky commands since their not really 
  2413. that useful at the moment.  What I'm going to try and do is put some
  2414. faster conversion routines in this library to do the jobs of these 
  2415. commands.
  2416.  
  2417.  
  2418.  
  2419. Statement: FadeInBitmap
  2420. --------------------------------------------------------------------------
  2421. Modes : Amiga/Blitz
  2422. Syntax: FadeInBitmap source#,dest#,delay[,offset1,offset2,height]
  2423.  
  2424. This is used to make a low rez, any height, bitmap appear on another
  2425. one in a nice way.  Source# and dest# should be bitmap object numbers
  2426. and delay is the 'slow-down' value for the fade.  This is necessary
  2427. because this routine works very fast - at full speed it looks just like
  2428. a slow screen copy.  You should note that the delay is taken as being a
  2429. word, thus don't pass 0 or you'll actually get a delay of 65535.  This
  2430. routine will adjust itself to take into account the depth of the bitmap,
  2431.  
  2432. WARNING: the depth of the destination bitmap should be AT   LEAST as big
  2433. as the depth of the source# bitmap because the depth of the fade is 
  2434. taken from the source# bitmap.
  2435.  
  2436. The optional parameters in this command allow you to set respectively:
  2437. the source bitmap y offset, the destination bitmap y offset and the
  2438. height of the fade (in pixels).  If these parameters are left out then
  2439. the fade automatically occurs across the full size of the bitmap.
  2440.   
  2441. See:  CLEARBITMAP 
  2442.  
  2443.  
  2444.  
  2445. Statement: ClearBitmap
  2446. --------------------------------------------------------------------------
  2447. Modes : Amiga/Blitz
  2448. Syntax: ClearBitmap source#,delay[,offset,height]
  2449.  
  2450. This is used to clear a low res, any height, bitmap in a very pleasant
  2451. way.  The parameters are the same as for FadeInBitmap except that
  2452. only one bitmap is needed.  The delay parameter i used for the same
  2453. reason as in FadeInBitmap - to slow down the effect.  The optional
  2454. parameters allow you to set a y start value for the clear and the
  2455. height (in pixels) of the clear.
  2456.  
  2457. See:  FADEINBITMAP 
  2458.  
  2459.  
  2460.  
  2461. Statement: ZoomX2
  2462. --------------------------------------------------------------------------
  2463. Modes : Amiga/Blitz
  2464. Syntax: ZoomX2 source#,dest#,add_source,add_dest,width,height
  2465.  
  2466. This command does a very fast X2 zoom.  It works with two bitmaps - one
  2467. source and one dest (note: these can be the same bitmap but you should
  2468. be careful that the zoom is not done over the source data).  The two
  2469. parameters add_source and add_dest allow you to specify the position of
  2470. the start of the zoom, they specified as byte offsets from the top left
  2471. corner of the bitmaps (byte 0).  These values can be calculated by the
  2472. following method:
  2473.  
  2474.     add_source=(Y x BITMAP_WIDTH (in bytes) + (X / 8)
  2475.  
  2476. or by using the built in command ADDValue.  Width and height are both
  2477. specified in pixels.
  2478.  
  2479. NOTE: There is no clipping on this command - be careful not to zoom off
  2480.       the edges of bitmaps. you can zoom from a bitmap to a different 
  2481.       size bitmap BUT the destination bitmap must be as deep as the 
  2482.       source and big enough to hold the zoomed data.
  2483.  
  2484. See:  ZOOMX4 , ZOOMX8 , ADDVALUE 
  2485.  
  2486.  
  2487.  
  2488. Statement: ZoomX4
  2489. --------------------------------------------------------------------------
  2490. Modes : Amiga/Blitz
  2491. Syntax: ZoomX4 source#,dest#,add_source,add_dest,width,height
  2492.  
  2493. This is exactly the same as ZoomX2 except that a times 4 zoom is done
  2494. by this command.
  2495.  
  2496. Note:    You can zoom from a bitmap to a different size bitmap BUT the
  2497.         destination bitmap must be as deep as the source and big enough
  2498.     to hold the zoomed data.
  2499.  
  2500. See:  ZOOMX2 , ADDVALUE 
  2501.  
  2502.  
  2503.  
  2504. Statement: ZoomX8
  2505. --------------------------------------------------------------------------
  2506. Modes : Amiga/Blitz
  2507. Syntax: ZoomX8 source#,dest#,add_source,add_dest,width,height
  2508.  
  2509. This is exactly the same as ZoomX2 except that a times 8 zoom is done
  2510. by this command
  2511.  
  2512. See:  ZOOMX2 , ADDVALUE 
  2513.  
  2514.  
  2515.  
  2516. Function: ADDValue
  2517. --------------------------------------------------------------------------
  2518. Modes : Amiga/Blitz
  2519. Syntax: addval.w=ADDValue(bitmap#,x,y)
  2520.  
  2521. This function can be used the calculate the add_source and add_dest
  2522. values used in all the zoom commands.  Just give the bitmap number, x
  2523. co-ordinate and the y co-ordinate and you'll get an answer back that can
  2524. be used straight in the ZoomXn commands.
  2525.  
  2526. See:  ZOOMX2, ZOOMX4 , ZOOMX8 , ZOOMXY 
  2527.  
  2528.  
  2529. Statement: InitZoomXY
  2530. --------------------------------------------------------------------------
  2531. Modes : Amiga/Blitz
  2532. Syntax: InitZoomXY source#,dest#,add_source,add_dest
  2533.  
  2534. This command initialises the ZoomXY routine to the bitmaps you want it
  2535. to work on.  You MUST use this routine before calling ZoomXY.  The
  2536. parameters are the same as the first four parameter for the ZoomXn
  2537. commands - source and dest bitmaps and add_source/dest values.
  2538.  
  2539. See:  ZOOMXY 
  2540.  
  2541.  
  2542.  
  2543. Statement: ZoomXY
  2544. --------------------------------------------------------------------------
  2545. Modes : Amiga/Blitz
  2546. Syntax: ZoomXY xzoom_value,yzoom_value,height
  2547.  
  2548. This command does a zoom based on the values you give it.  You should
  2549. note, though, that zoom values should be integer values (no fractional
  2550. part).  The height is the height in pixels that the source data should 
  2551. be zomed to.  Please note that this command is different to the other 
  2552. zoom commands in that the output of it is clipped to fit inside 320 
  2553. pixels.
  2554.  
  2555. This command should only be used after InitZoomXY has been called.
  2556. This routine has an extra feature in that if you give both zoom values
  2557. as 1 then a bitmap copy is done from the source to the dest using the
  2558. offsets given and the height.
  2559.  
  2560. See:  INITZOOMXY 
  2561.  
  2562.  
  2563.  
  2564. Statement: Derez
  2565. --------------------------------------------------------------------------
  2566. Modes : Amiga/Blitz
  2567. Syntax: Derez source#,dest#,add_source,add_dest,derez_value,height
  2568.  
  2569. This command is used to derez a low resolution bitmap onto another one.
  2570. The bitmaps are source# and dest#, add_source and add_dest are used to
  2571. control the start position of the derez (see ZoomX2 and ADDValue to see
  2572. how these are calculated).  The derez value if obviously the amount that
  2573. each pixel will be derezed to in both the x and y directions, the height
  2574. is the height of the derez - the derez is clipped to fit inside this in 
  2575. the y direction and inside 320 pixels in the x direction.
  2576. This routine has an extra feature in that if you give derez_value as 1
  2577. then a bitmap copy is done from the source to the dest using the offsets
  2578. given and the height.
  2579.  
  2580.  
  2581. Statement: ReduceX2
  2582. --------------------------------------------------------------------------
  2583. Modes : Amiga/Blitz
  2584. Syntax: ReduceX2 source#,dest#,add_source,add_dest,width,height
  2585.  
  2586. Description:
  2587. This command halves the given rectangle of one bitmap and pastes it onto
  2588. the destination bitmap.  Width should be a multiple of 16, width and 
  2589. height should describe a rectangular area that will be reduced (these 
  2590. values should be in pixels).
  2591.  
  2592. See  ZOOMX2  and other commands for more information about the 
  2593. syntax of this command.
  2594.  
  2595.  
  2596.  
  2597.             Reflective Images Zone-Joystick Library v1.2
  2598.             ============================================
  2599.  
  2600.         By Stephen McNamara, original Joy Library by Steve Matty
  2601.                 (c)1994 Reflective Images
  2602.  
  2603. This library contains commands for setting up zones and testing the status
  2604. of the joysticks attached to the Amiga.
  2605.  
  2606.  ZONE-JOY COMMANDS @NDNODE
  2607.  
  2608.  
  2609.  
  2610.                 Zone-Joy commands:
  2611.  
  2612. Command list:
  2613.                  FREEZONETABLE  
  2614.                  NEWZONETABLE   
  2615.                  SETZONE        
  2616.                  USEZONETABLE   
  2617.                  ZONEINIT       
  2618.                  =ALLFIRE       
  2619.                  =JFIRE         
  2620.                  =JHORIZ        
  2621.                  =JVERT         
  2622.                  =ZONETABLESIZE 
  2623.                  =ZONE          
  2624.                  =ZONETEST      
  2625.                  =ZONETABLE     
  2626.  
  2627.  
  2628. Function: ZoneTableSize
  2629. -------------------------------------------------------------------------
  2630. Modes  : Amiga/Blitz
  2631. Syntax : size.l=ZoneTableSize
  2632.  
  2633. This function returns the size, in zones, of the current zonetable.  It
  2634. is equivalent of doing: size.l=peek.l(ZoneTable).
  2635.  
  2636.  
  2637. Statement/Function: UseZoneTable
  2638. -------------------------------------------------------------------------
  2639. Modes  : Amiga/Blitz
  2640. Syntax : UseZoneTable table#
  2641.  
  2642. This command is used to change the current zonetable to the selected
  2643. one. If used as a function, it will return TRUE for success or FALSE 
  2644. for failure.
  2645.  
  2646. Valid zonetable numbers range from 0 to 15.
  2647.  
  2648.  
  2649. Statement/Function: NewZoneTable
  2650. -------------------------------------------------------------------------
  2651. Modes  : Amiga/Blitz
  2652. Syntax : NewZoneTable table#,size
  2653.  
  2654. This command will attempt to allocate a new zonetable with the given
  2655. table number. If the table already exists it will be deleted.  The 
  2656. maximum size for a zonetable is 65536 zones. If used as a function, this
  2657. command will return FALSE for failure or TRUE for success.  You should 
  2658. note that all zones are automatically reset in the new table and that 
  2659. creating a table does not make it the current table, this must be done
  2660. with UseZoneTable.
  2661.  
  2662. Valid zonetable numbers range from 0 to 15.
  2663.  
  2664. IMPORTANT NOTE: you cannot define the size of zonetable 0.  You cannot
  2665. use this command to alter it in any way.
  2666.  
  2667.  
  2668. Statement/Function: FreeZoneTable
  2669. -------------------------------------------------------------------------
  2670. Modes  : Amiga/Blitz
  2671. Syntax : FreeZoneTable table#
  2672.  
  2673. This command is used to free a zonetable from memory.  If used as a
  2674. function, it will return TRUE or FALSE.  When successfully called, this
  2675. command will free the zonetable and change the currently used zonetable
  2676. to table number 0.
  2677.  
  2678. Valid zonetable numbers range from 0 to 15.
  2679.  
  2680. IMPORTANT NOTE: you cannot free zone table 0.
  2681.  
  2682.  
  2683. Function: ZoneTable
  2684. -------------------------------------------------------------------------
  2685. Modes  : Amiga/Blitz
  2686. Syntax : ad.l=ZoneTable
  2687.  
  2688. This function returns the address in memory of the zone information
  2689. storage area for the current zonetable. The zones are stored one after
  2690. the other, with each zone taking up 8 words (16 bytes) in the data area,
  2691. making a total size of 2048 bytes.  They are stored in the following 
  2692. way:
  2693.  
  2694.         Rectangular:      +0: x1
  2695.                 +2: y1
  2696.                 +4: x2
  2697.                 +6: y2
  2698.  
  2699.         Circular:    +0: x1
  2700.                 +2: y1
  2701.                 +4: radius of zone
  2702.                 +6: -1 <-- this is set to show that the
  2703.                             zone is circular.
  2704.  
  2705.         Undefined zone:    +0: -1
  2706.                 +2: -1
  2707.                 +4: -1
  2708.                 +6: -1
  2709.  
  2710. The first longword (4 bytes) of the zonetable is used to hold the size,
  2711. in zones, of the table (thus the true size of the zonetable is 4+number
  2712. of zones*8).
  2713.  
  2714.  
  2715.  
  2716. Statement: ZoneInit
  2717. ---------------------------------------------------------------------------
  2718. Modes  : Amiga/Blitz
  2719. Syntax : ZoneInit [zone_num]|[start_zone,end_zone]
  2720.  
  2721. This command is used to clear any zones currently set.  The optional
  2722. parameters allow you to select either a single zone or a range of zones
  2723. to reset.
  2724.  
  2725.  
  2726.  
  2727. Statement: Setzone
  2728. ---------------------------------------------------------------------------
  2729. Modes  : Amiga/Blitz
  2730. Syntax : Setzone zone#,x1,y1,radius
  2731.          Setzone zone#,x1,y1,x2,y2
  2732.  
  2733. This command lets you set up zones for testing.  The first version is
  2734. used when you want to set up a circular zone and the second when you 
  2735. want a rectangular one.  With rectangular zones, x1,y1 should be the top
  2736. left corner of the rectangle and x2,y2 should be the bottom left.
  2737.  
  2738. Note: The max zone number is 255.
  2739.       When you use this command, the zone number you give is ANDed with
  2740.       256 so you should ensure that you give a number lower than 256 so
  2741.       that previously defined zones don't get corrupted.
  2742.       Zones can be defined in any order.
  2743.       Circular zones are used in exactly the same way as rectangular
  2744.       ones.
  2745.  
  2746.  
  2747.  
  2748. Function: Zone
  2749. ---------------------------------------------------------------------------
  2750. Modes  : Amiga/Blitz
  2751. Syntax : a.w=Zone(x,y)
  2752.  
  2753. This command takes the co-ordinates x,y and checks to see if they are
  2754. inside any of the defined zones.  The zones are searched in order,
  2755. starting at 0 and going through to 255.  This command will return the
  2756. first zone that the co-ordinates were found to be inside, you should 
  2757. note that both types of zones are tested (rectangular and circular).
  2758.  
  2759. This command returns either -1 for not inside a zone or the zone number.
  2760.  
  2761.  
  2762.  
  2763. Function: ZoneTest
  2764. ---------------------------------------------------------------------------
  2765. Modes  : Amiga/Blitz
  2766. Syntax : a.w=ZoneTest(start_num[,end_num],x,y)
  2767.  
  2768. This command is the same as the Zone command except that it allows you
  2769. to select either one individual zone to test or a range of zones.  You
  2770. should, though, ensure that end_num if greater than start_num.
  2771.  
  2772. This command returns either -1 for not inside a zone or the zone number.
  2773.  
  2774.  
  2775.  
  2776. Function: ZoneTable
  2777. ---------------------------------------------------------------------------
  2778. Modes  : Amiga/Blitz
  2779. Syntax : ad.l=ZoneTable
  2780.  
  2781. This function returns the address in memory of the zone information
  2782. storage area. The zones are stored one after the other, with each zone
  2783. taking up 8 words (16 bytes) in the data area, making a total size of
  2784. 2048 bytes.  They are stored in the following way:
  2785.  
  2786.         Rectangular:      +0: x1
  2787.                 +2: y1
  2788.                 +4: x2
  2789.                 +6: y2
  2790.  
  2791.         Circular:    +0: x1
  2792.                 +2: y1
  2793.                 +4: radius of zone
  2794.                 +6: -1 <-- this is set to show that the
  2795.                             zone is circular.
  2796.  
  2797.         Undefined zone:    +0: -1
  2798.                 +2: -1
  2799.                 +4: -1
  2800.                 +6: -1
  2801.  
  2802.  
  2803.  
  2804. Function: JFire
  2805. ---------------------------------------------------------------------------
  2806. Modes  : Amiga/Blitz
  2807. Syntax : jf.b=JFire(joy#)
  2808.  
  2809. This command tests the fire button status of the joystick joy#, where
  2810. joy# is between 1 and 4.  You should note that, as with all the joystick
  2811. commmands, joy#=1 refers to the Amiga's joystick port, joy#=2 refers to
  2812. the mouse port, and joy#=3 or joy#=4 refer to the four player adapter
  2813.  ports.
  2814.  
  2815. This command returns 0 for fire button not pressed or -1 for pressed
  2816.  
  2817.  
  2818.  
  2819. Function: JHoriz
  2820. ---------------------------------------------------------------------------
  2821. Modes  : Amiga/Blitz
  2822. Syntax : jh.b=JHoriz(joy#)
  2823.  
  2824. This command is used to test the horizontal direction of the selected
  2825. joystick.  It returns:
  2826.  
  2827.         0: No horizontal direction
  2828.              -1: Joystick left
  2829.             1: Joystick right
  2830.  
  2831.  
  2832.  
  2833. Function: JVert
  2834. ---------------------------------------------------------------------------
  2835. Modes  : Amiga/Blitz
  2836. Syntax : jv.b=JVert(joy#)
  2837.  
  2838. This command is used to test the vertical direction of the selected
  2839. joystick.  It returns:
  2840.  
  2841.         0: No vertical direction
  2842.              -1: Joystick up
  2843.             1: Joystick down
  2844.  
  2845.  
  2846.  
  2847. Function: AllFire
  2848. ---------------------------------------------------------------------------
  2849. Modes  : Amiga/Blitz
  2850. Syntax : af.b=AllFire [(bit_pattern)]
  2851.  
  2852. This command is used to test the fire button status of all four
  2853. joysticks.  It returns a byte with the first four bits giving the
  2854. joystick status, false=fire button not pressed, true=fire button 
  2855. pressed. The following bits belong to joysticks:
  2856.  
  2857.         bit 0: joystick 1 (joystick port)
  2858.         bit 1: joystick 2 (mouse port)
  2859.         bit 2: joystick 3 (four player adaptor)
  2860.         bit 3: joystick 4 (four player adaptor)
  2861.  
  2862. The optional bit pattern can be used to restrict the testing of the fire
  2863. buttons.  If a bit in the pattern is clear (false) then the joystick it
  2864. belongs to will not have its fire button tested,
  2865.  
  2866. e.g. AllFire (%0011) will test joysticks 1 and 2 and return the
  2867.      result.  It will return false for joysticks 3 and 4.
  2868.  
  2869.  
  2870.  
  2871. Library: neilsciatrackerlib #56
  2872. --------------------------------------------------------------------------
  2873. Author: Neil O'Rourke, 6 Victoria St, TAMWORTH, NSW 2340, AUSTRALIA
  2874.  
  2875. Overview:
  2876. Many thanks to Neil, from what I have seen on the net there are already 
  2877. many BlitzUsers using this library to great success. I'm trying to fit the
  2878. example code on the disk as I type...
  2879.  
  2880.  QUICK USAGE        AUTHOR'S DOC 
  2881.  
  2882.                            The CIA Tracker commands:
  2883.  
  2884.  BUILDNOTETABLE                GETSONGPOSITION         
  2885.  CHECKTRACKEREVENT             GETTRACKEREVENT                
  2886.  CHECKTRACKERMODULEID          GETTRACKERINSTRUMENT          
  2887.  FREETRACKERMODULE             GETTRACKERLOCATION             
  2888.  GETPATTERNPOSITION            GETTRACKERNAME                  
  2889.  GETSAMPLELENGTH               GETTRACKERNOTE                  
  2890.  GETSAMPLELOCATION             GETTRACKERNOTENUMBER            
  2891.  GETSAMPLENAME                 GETTRACKERSIZE                   
  2892.  GETSONGLENGTH                 GETTRACKERVOLUME                     
  2893.  
  2894.  INITTRACKER                   SETTRACKERMODULE        
  2895.  LOADTRACKERMODULE             SETTRACKERTEMPO          
  2896.  OLDGETTRACKERNOTENUMBER       STARTTRACKER              
  2897.  PAUSETRACKER                  STARTTRACKERPATPOS      
  2898.  PLAYTRACKERSAMPLE             STOPTRACKER             
  2899.  RESTARTTRACKER                WAITTRACKEREVENT            
  2900.  SETDMAWAIT                    
  2901.  SETSONGPATTERNPOSITION    
  2902.  SETTRACKERMASK                  
  2903.  
  2904. Notes:
  2905. ~~~~~~
  2906. Quite a number of these commands extract their data from the playroutine in
  2907. real time; that is, around fifty times a second (depending upon the tempo).
  2908. Therefore, the value your program receives could well be very different
  2909. from what is actually happening in the song.
  2910.  
  2911.  
  2912. Disclaimer:
  2913. ~~~~~~~~~~~
  2914. By installing this software on your system, you are agreeing that I have no
  2915. liability as to the outcome of such use.  If, for example, you use a
  2916. command as documented and a floppy disk is ejected from your disk drive
  2917. with such force that it severs your head from your neck, tough.  Next time,
  2918. duck.
  2919.  
  2920.  
  2921. Author's Documentation: CIATracker.lib Documentation
  2922.  
  2923. Neil O'Rourke
  2924.  
  2925. Version 1.6 (24/6/94)
  2926.  
  2927. Introduction
  2928. ~~~~~~~~~~~~
  2929. The standard soundtracker replay routines supplied with Blitz Basic 2 have
  2930. many faults, which this library attempts to overcome.  Some of the features
  2931. are:
  2932.  
  2933.   - Plays all ST/NT/PT songs that utilise either the VBLANK timing or the
  2934.     more recent CIA based timings
  2935.   - Plays back correctly on 50/60Hz systems, running either PAL or NTSC
  2936.   - Contains more specialised functions for advanced programmers
  2937.   - Enables the programmer to syncronise graphics with their music
  2938.  
  2939.  
  2940. Credits:
  2941. ~~~~~~~~
  2942. Original ProTracker playroutine by Amiga Freelancers, converted and
  2943. enhanced for Blitz by Neil O'Rourke.  Naggings from Roy, Jeff and Richard.
  2944.  
  2945. The 1.6 upgrade
  2946. ~~~~~~~~~~~~~~~
  2947. This is a maintenance upgrade, with some subtle (and not so subtle) bugs
  2948. fixed or noted.
  2949.  
  2950. LoadTrackerModule no longer crashes the machine if the name was invalid.
  2951.  
  2952. SetTrackerMask has been removed for the moment (this was causing the
  2953. TrackerEvent system to foul up)
  2954.  
  2955. WaitTrackerEvent has a nasty tendancy to lock the machine up.  Don't call
  2956. this command, use While NOT CheckTrackerEvent:Wend to wait for an event if
  2957. you must.  WaitTrackerEvent currently sits on the VBLANK interrupt, however
  2958. I think the problem is due to the sheer bulk of ciaTrackerLib getting in
  2959. the way of checking.  I think.
  2960.  
  2961. GetTrackerNoteNumber was found to be chewing up CPU time, and has been
  2962. replaced by a new version that chews up 2K of ram extra.
  2963.  
  2964. I've found that if you have run errors enabled to bring up the requester,
  2965. your module won't start sometimes.  Don't know what to do about this, as I
  2966. don't know what causes it.
  2967.  
  2968.  
  2969. Quick Usage:
  2970. ~~~~~~~~~~~~
  2971. First you must set the DMAWait time with the SetDMAWait command.  Then,
  2972. enable all the channels with SetTrackerMask.  Load the module you want with
  2973. the LoadTrackerModule command, and then either StartTrackerModule it, or
  2974. InitTracker/RestartTracker later on.
  2975.  
  2976.  
  2977.  
  2978. Function: LoadTrackerModule
  2979. --------------------------------------------------------------------------
  2980. Syntax  : success=LoadTrackerModule(TrackerModule#,FileName$)
  2981.  
  2982. Description:
  2983. Loads the named module into chip ram, ready for playing.  This command can
  2984. only be called in Amiga mode.  success is a boolean return code (true).  
  2985. If the load fails for any reason, success returns the AmigaDOS error code.
  2986.  
  2987. Note that there is an implicit call to FreeTrackerModule for whatever
  2988. module you are trying to load.  However, if you want to load another
  2989. module, don't try to load it on top of the existing one that is playing.
  2990. Use another TrackerModule# (you have from 0 to 8).  The results are
  2991. unpredictable, and range from nothing to a system crash.  We can't call
  2992. StopTracker, because this will stop everything.
  2993.  
  2994.  
  2995. Function: StartTracker
  2996. --------------------------------------------------------------------------
  2997. Syntax  : success=StartTracker(TrackerModule#)
  2998.  
  2999. Description:
  3000. Starts to play the requested module, stopping any modules already playing,
  3001. or restarts the current module, and returns true.  Returns false if the
  3002. module couldn't be started for some reason (like it isn't loaded).
  3003.  
  3004.  
  3005. Statement: StopTracker
  3006. --------------------------------------------------------------------------
  3007.  
  3008. Description:
  3009. Stops the current module
  3010.  
  3011.  
  3012. Statement: SetDMAWait
  3013. --------------------------------------------------------------------------
  3014. Syntax   : SetDMAWait value
  3015.  
  3016. Description:
  3017. This sets the DMA Wait for your machine.  On a standard 7.14MHz 68000 
  3018. based machine, the value is the default (300).  However, faster machines 
  3019. can cause the replay routine to skip notes.  On a 25MHz 68030 machine, the
  3020. suggested value is 900.  Set this as low as possible so that you still 
  3021. hear all the notes.  A future upgrade *may* do this automatically, but I 
  3022. have no intention of implementing it at this stage, as I don't know what 
  3023. DMAWait to set for different speed processors and version motherboards.
  3024.  
  3025. DMA wait is important.  Technically, when the replay routine loads the 
  3026. chip registers with the information about the current note (location, 
  3027. volume, pitch), a delay is needed to ensure that the chips actually get 
  3028. the data, which happens on the next DMA slot.  Since the CPU can be 
  3029. clocked independantly of the motherboard, we can't just delay by a set 
  3030. amount.  How this problem has been solved is a busy wait that simply 
  3031. loops around the number of times as specified by the DMAWait value.  
  3032. A low value therefore lessens the load on the CPU but increases the 
  3033. chances of missing notes while playing a song.  Too high a value can bog
  3034. the CPU down, and slow the song down as interrupts are missed.  
  3035.  
  3036.  
  3037. Statement: FreeTrackerModule
  3038. --------------------------------------------------------------------------
  3039. Syntax   : FreeTrackerModule TrackerModule#
  3040.  
  3041. Description:
  3042. This frees a module loaded with LoadTrackerModule.  You cannot free a
  3043. module that has been set up with SetTrackerModule (see below), but there 
  3044. is nothing to stop you trying.
  3045.  
  3046.  
  3047. Statement: SetTrackerModule
  3048. --------------------------------------------------------------------------
  3049. Syntax   : SetTrackerModule TrackerModule#,ModuleAddress
  3050.  
  3051. Description:
  3052. This sets an arbitary area of memory as a tracker module, useful if you
  3053. have BLoaded a file and want to hear if it is a module. Caution: a
  3054. non-module may crash the Amiga.
  3055.  
  3056.  
  3057. Functions: GetTrackerSize & GetTrackerLocation
  3058. --------------------------------------------------------------------------
  3059. Syntax   : trackerlength=GetTrackerSize(TrackerModule#)  
  3060.            GetTrackerLocation (TrackerModule#)
  3061.  
  3062. Description:
  3063. Both these functions return information about the module that has been
  3064. loaded with LoadTrackerModule.  There should be no need to use this
  3065. information, and these commands are only included because they served a
  3066. purpose in debugging a long time ago, and to remove them would cause
  3067. problems with the Blitz tokens
  3068.  
  3069.  
  3070. Function: GetTrackerEvent
  3071. --------------------------------------------------------------------------
  3072. Syntax  : trackerevent=GetTrackerEvent
  3073.  
  3074. Description:
  3075. This command is a customised extension to the ProTracker replay routine. 
  3076. A "TrackerEvent" occurs when the replay routine comes across a $8xx 
  3077. command. This command is not defined in the command list, and many demos 
  3078. (eg Jesus on E's) use it to trigger effects.  This command gets the most 
  3079. recent TrackerEvent, so any program looking at this will have to compare 
  3080. the current value to the value that triggered the current effect.
  3081.  
  3082.  
  3083. Function: CheckTrackerEvent
  3084. --------------------------------------------------------------------------
  3085. Syntax  : success=CheckTrackerEvent
  3086.  
  3087. Description:
  3088. This routine checks to see if a TrackerEvent has occured since the last
  3089. time the routine was called, and returns True if it has.  Use
  3090. GetTrackerEvent to determine what data the $8xx command had.
  3091.  
  3092.  
  3093. Statement: WaitTrackerEvent
  3094. --------------------------------------------------------------------------
  3095.  
  3096. ** V1.6: DO NOT USE THIS COMMAND! **
  3097.  
  3098.  
  3099.  
  3100. Function: CheckTrackerModuleID
  3101. --------------------------------------------------------------------------
  3102. Syntax  : success=CheckTrackerModuleID(TrackerModule#)
  3103.  
  3104. Description:
  3105. This checks the module for the standard Pro/Noise/SoundTracker ID string
  3106. "M.K." (or "M!K!" in the case of a 100 pattern PT module), and returns 
  3107. True if one of them is found.  This means that you can safely call 
  3108. StartTracker.
  3109.  
  3110. Note that there is no 100% guarenteed way of determining what is a module
  3111. and what isn't.  Bit Arts, for example, remove the M.K. identifier to make
  3112. it harder to rip modules, so if you're writing a module ripping program,
  3113. you have to take this result with a grain of salt.
  3114.  
  3115.  
  3116. Function: GetTrackerVolume
  3117. --------------------------------------------------------------------------
  3118. Syntax  : volume=GetTrackerVolume(TrackerChannel#)
  3119.  
  3120. Description:
  3121. Returns the last volume set by a $Cxx command for the named channel, which
  3122. are numbered from 0 to 3.  This is not the "real" volume of the sample that
  3123. is currently playing.
  3124.  
  3125.  
  3126. Function: GetTrackerNote
  3127. --------------------------------------------------------------------------
  3128. Syntax  : note=GetTrackerNote(TrackerChannel#)
  3129.  
  3130. Description:
  3131. Returns the note that the play routine has just played in the named
  3132. channel.  This command is really only useful for graphic bars or simple
  3133. syncronisation of graphics to the music, but for that purpose the
  3134. TrackerEvent commands are far more flexable.  Note that the value returned
  3135. is the period of the note.  You have to look up the note in a period table
  3136. to find out what was actually being played.
  3137.  
  3138.  
  3139. Statement: SetTrackerTempo
  3140. --------------------------------------------------------------------------
  3141. Syntax   : SetTrackerTempo Tempo
  3142.  
  3143. Description:
  3144. Sets the tempo of the current song.  Note that a tempo command ($Fxx) will
  3145. override any value set by this command.  This command is really a stub to
  3146. the actual $Fxx command in the playroutine, and has all the features
  3147. associated with it.  Check your tracker docs for more details.
  3148.  
  3149.  
  3150. Function: GetTrackerInstrument
  3151. --------------------------------------------------------------------------
  3152. Syntax  : instrument=GetTrackerInstrument(TrackerChannel#)
  3153.  
  3154. Description:
  3155. Gets the instrument that is playing in the channel.
  3156.  
  3157.  
  3158. Function: GetPatternPosition
  3159. --------------------------------------------------------------------------
  3160. Syntax  : PatPos=GetPatternPosition
  3161.  
  3162. Description:
  3163. This returns the current position in the current pattern.
  3164.  
  3165.  
  3166. Function: GetSongPosition
  3167. --------------------------------------------------------------------------
  3168. Syntax  : SongPos=GetSongPosition
  3169.  
  3170. Description:
  3171. This returns the current pattern that is playing in the song
  3172.  
  3173.  
  3174. Statement: SetSongPatternPosition
  3175. --------------------------------------------------------------------------
  3176. Syntax   : SetSongPatternPosition Pattern#,Position#
  3177.  
  3178. Description:
  3179. This command sets what pattern to play, and from what position.  Use this
  3180. while a song is playing to jump to another pattern (eg. a game over 
  3181. music). Call StartTrackerPatPos() to start a module from scratch.
  3182.  
  3183.  
  3184. Function: GetSongLength
  3185. --------------------------------------------------------------------------
  3186. Syntax  : NumPatterns=GetSongLength
  3187.  
  3188. Description:
  3189. Returns the number of patterns in the current module.  Useful for displays
  3190. like in IntuiTracker, where the title bar of the window gives a display
  3191. that can be done like:
  3192.  
  3193.   NPrint GetSongLength,":",GetSongPosition
  3194.  
  3195.  
  3196. Statement: SetTrackerMask
  3197. --------------------------------------------------------------------------
  3198. Syntax   : SetTrackerMask Mask
  3199.  
  3200. ** REMOVED IN V1.6 **
  3201.  
  3202.  
  3203. Function: OldGetTrackerNoteNumber
  3204. --------------------------------------------------------------------------
  3205. Syntax  : notenumber=OldGetTrackerNoteNumber(Channel#)
  3206.  
  3207. Description:
  3208. This returns the number of the note played on the specified channel, with
  3209. C-1 being note 1.  Of use really in creating "equalizer bars".
  3210.  
  3211. V1.6: This command has turned out to be a CPU-hog!  The new implementation
  3212. will consume a lot of memory but will be much faster.  When you load your
  3213. old programs, GetTracker... will be replaced by OldGetTracker..., so your
  3214. code will continue to work.
  3215.  
  3216.  
  3217. Function: StartTrackerPatPos
  3218. --------------------------------------------------------------------------
  3219. Syntax  : ret.l=StartTrackerPatPos(TrackerModule#,Pattern#,Position#)
  3220.  
  3221. This starts the named module at the requested pattern and position.  In 
  3222. all other respects it is the same as StartTracker.
  3223.  
  3224.  
  3225. Statements: PauseTracker &  RestartTracker
  3226. --------------------------------------------------------------------------
  3227.  
  3228. Description:
  3229. These commands allow you to stop a tracker module are restart it at a later
  3230. time.
  3231.  
  3232.  
  3233. Statement: PlayTrackerSample
  3234. --------------------------------------------------------------------------
  3235. Syntax   : PlayTrackerSample Sample#,Period,Volume,Channel
  3236.  
  3237. Description:
  3238. Plays a sample through the channel.  The module must not be running.
  3239.  
  3240.  
  3241. Statement: InitTracker
  3242. --------------------------------------------------------------------------
  3243. Syntax   : success=InitTracker(TrackerModule#)
  3244.  
  3245. Description:
  3246. Identical to StartTracker, except that the module doesn't start, but is
  3247. initialised.  Of use with the commands that use the current tracker 
  3248. module. Use ReStartTracker to start playing.
  3249.  
  3250.  
  3251. Function: GetSampleLocation
  3252. --------------------------------------------------------------------------
  3253. Syntax  : location=GetSampleLocation(Sample#)
  3254.  
  3255. Description:
  3256. Returns the address in memory of the named sample in the current module.
  3257.  
  3258.  
  3259. Function: GetSampleLength
  3260. --------------------------------------------------------------------------
  3261. Syntax  : length=GetSampleLength(Sample#)
  3262.  
  3263. Description:
  3264. Returns the length in words of the named sample in the current module.
  3265. Multiply by two to get the byte length.
  3266.  
  3267.  
  3268. Function: GetSampleName
  3269. --------------------------------------------------------------------------
  3270. Syntax  : name$=GetSampleName(Sample#)
  3271.  
  3272. Description:
  3273. Returns the name of the sample in name$.
  3274.  
  3275.  
  3276. Function: GetTrackerName
  3277. --------------------------------------------------------------------------
  3278. Syntax  : name$=GetTrackerName(TrackerModule#)
  3279.  
  3280. Description:
  3281. Returns the name of the module in name$
  3282.  
  3283.  
  3284. Statement: BuildNoteTable
  3285. --------------------------------------------------------------------------
  3286.  
  3287. Description:
  3288. This command builds a note table for use with GetTrackerNoteNumber.  It
  3289. consumes 2K of memory for the look-up table.
  3290.  
  3291.  
  3292. Function: GetTrackerNoteNumber
  3293. --------------------------------------------------------------------------
  3294. Syntax  : notenumber=GetTrackerNoteNumber(Channel#)
  3295.  
  3296. Description:
  3297. This returns the number of the note played on the specified channel, with
  3298. C-1 being note 1.  Of use really in creating "equalizer bars".
  3299.  
  3300. For speed purposes, no error checking (like, has the note table been
  3301. built?) is done.
  3302.  
  3303.  
  3304.  
  3305.     There's not much to tell about the Elmore library, it's GREAT!
  3306.  
  3307.             Library name: ELMORELIB
  3308.              Written by: Richard T. Elmore
  3309.            Copyright: 1994 HeadSoft Software
  3310.               Library number: 111
  3311.  
  3312.  
  3313.              HARDWARE PROGRAMMING   
  3314.              MATH/NUMERIC FUNCTIONS 
  3315.              ARRAY FUNCTIONS        
  3316.              INTUITION PROGRAMMING  
  3317.              STRING HANDLING        
  3318.              LIBRARY PROGRAMMING    
  3319.  
  3320.  
  3321.                             ELMORE HARDWARE LIBRARY
  3322. --------------------------------------------------------------------------
  3323.  
  3324.                                CLICKMOUSE    
  3325.                                FORCENTSC    
  3326.                                FORCEPAL     
  3327.                                FREQ         
  3328.                                QUIET        
  3329.                                RESETTIMER   
  3330.                                VWAITPOS     
  3331.                                =CHECKAGA    
  3332.                                =CHIPFREE    
  3333.                                =DEPTH       
  3334.                                =FASTFREE    
  3335.                                =JOYC        
  3336.                                =LARGESTFREE 
  3337.                                =PEEKTO$     
  3338.                                =TICKS       
  3339.  
  3340.  
  3341.                               ELMORE MATH LIBRARY
  3342. --------------------------------------------------------------------------
  3343.             
  3344.                                 RRANDOMIZE  
  3345.                                 =AVG        
  3346.                                 =AVG.L      
  3347.                                 =AVG.Q      
  3348.                                 =LARGEST    
  3349.                                 =LARGEST.L  
  3350.                                 =LARGEST.Q  
  3351.                                 =RRND       
  3352.                                 =SMALLEST   
  3353.                                 =SMALLEST.L 
  3354.                                 =SMALLEST.Q 
  3355.                                 =XOR                    
  3356.  
  3357.  
  3358.             INTUITION PROGRAMMING 
  3359. --------------------------------------------------------------------------
  3360.  
  3361.                               REQUEST         
  3362.                               SHOWREQUESTORS  
  3363.                               WAITFOR         
  3364.                               =ACTIVESCREEN   
  3365.                               =ACTIVEWINDOW   
  3366.                               =SCREENHEIGHT   
  3367.                               =SCREENWIDTH    
  3368.  
  3369.  
  3370.             STRING HANDELING 
  3371. --------------------------------------------------------------------------
  3372.         
  3373.                                 =BIN#        
  3374.                                 =CHARCOUNT   
  3375.                                 =CHECKSUM    
  3376.                                 =CIPHER$     
  3377.                                 =HEX#        
  3378.                                 =NULL        
  3379.                                 =REPEATS     
  3380.                                 =SEARCHBEGIN 
  3381.                                 =SEARCHBEGIN 
  3382.                                 =SPACE$      
  3383.  
  3384.  
  3385.             LIBRARY PROGRAMMING 
  3386. --------------------------------------------------------------------------
  3387. These functions will return the base address of their 
  3388. respective libraries, for advanced system programming.  Note that 
  3389. register A6 will also be loaded with this address, to make programming
  3390. a bit easier for assembly routines.
  3391.  
  3392.                               COMMODITIEBASE 
  3393.                               DISKFONTBASE   
  3394.                               DOSBASE        
  3395.                               FFPBASE        
  3396.                               GRAPHICSBASE   
  3397.                               ICONBASE       
  3398.                               INTUITIONBASE  
  3399.                               REXXSYSBASE    
  3400.  
  3401.  
  3402.  
  3403. Statement: QUIET 
  3404. ---------------------------------------------------------------------------
  3405. Syntax: Quiet ChannelMask 
  3406. Modes: Amiga or Blitz
  3407.  
  3408. This command will silence the sound channels specified by ChannelMask. 
  3409. See the description for "Envelope" for more information on channelmasks.
  3410.  
  3411.  
  3412. Statement: FREQ
  3413. ---------------------------------------------------------------------------
  3414. Syntax: Freq Channelmask,period
  3415. Modes: Amiga or Blitz
  3416.  
  3417. This command allows you to change the period, or pitch, of the currently 
  3418. playing sound effect. Note that the lower the period, the higher the 
  3419. frequency; Thus, a period of 100 would be very high-pitched, whereas a 
  3420. period of 30000 would be low-pitched.
  3421.  
  3422.  
  3423. Function: TICKS
  3424. ---------------------------------------------------------------------------
  3425. Syntax: Ticks  
  3426. Modes: Amiga or Blitz
  3427.  
  3428. This function returns the number of "ticks" since the Amiga was switched
  3429. on, or since the last "RESETTIMER" command.  The unit of measurement is 
  3430. 1/60 of a second for NTSC machines, and 1/50 of a second for PAL 
  3431. machines.
  3432.  
  3433. See Also:  RESETTIMER 
  3434.  
  3435.  
  3436. Statement: RESETTIMER 
  3437. --------------------------------------------------------------------------
  3438. Syntax: ResetTimer  
  3439. Modes: Amiga or Blitz
  3440.  
  3441. Resets the Amiga's hardware timer to zero "ticks." Read the description 
  3442. for  TICKS  for more information.
  3443.  
  3444.  
  3445. Function: JOYC 
  3446. --------------------------------------------------------------------------
  3447. Syntax: JoyC (Port)  
  3448. Modes: Amiga or Blitz
  3449.  
  3450. This function works similarly to the JoyB() function, however it allows 
  3451. you to read the second fire button on two-button joysticks.  It will 
  3452. return a 1 if the normal fire button is pressed, a 2 if the second 
  3453. button is pressed, or 3 if both buttons are pressed.  Otherwise, it will
  3454. return a zero (no buttons pressed.)
  3455.  
  3456.  
  3457. Statement: VWAITPOS 
  3458. --------------------------------------------------------------------------
  3459. Syntax: VWaitPos RasterLine
  3460. Modes: Amiga or Blitz
  3461.  
  3462. This command is similar to VWAIT, except it allows you to wait for any 
  3463. raster position, not just the top of the display.  This is useful for 
  3464. interesting graphics effects.
  3465.  
  3466.  
  3467. Function: CHECKAGA
  3468. --------------------------------------------------------------------------
  3469. Syntax: CheckAGA  
  3470. Modes: Amiga or Blitz
  3471.  
  3472. Returns 'TRUE' for AGA machines, otherwise returns 'FALSE.' Using 
  3473. ExecVersion alone will not detect an AGA machine.  Kickstart version 39
  3474. can and does run on pre-AGA machines, such as the A3000, etc.  
  3475. Therefore, this function is provided to allow you to accurately 
  3476. determine if the AGA chipset is present.
  3477.  
  3478.  
  3479. Function: PEEKTO$ 
  3480. --------------------------------------------------------------------------
  3481. Syntax: PeekTo$ (Address,byte)  
  3482. Modes: Amiga or Blitz
  3483.  
  3484. PeekTo$() is similar to the Peek$() function, except you can specify
  3485. what terminator byte to use.  With Peek$() the terminator will always
  3486. be zero, but PeekTo$() will accept any byte value as a terminator.
  3487.  
  3488.  
  3489. Statement: FORCEPAL 
  3490. --------------------------------------------------------------------------
  3491. Syntax: ForcePAL  
  3492. Modes: Amiga or Blitz
  3493.  
  3494. This command switches the current screen from NTSC to PAL.
  3495.  
  3496.  
  3497. Statement: FORCENTSC 
  3498. --------------------------------------------------------------------------
  3499. Syntax: ForceNTSC  
  3500. Modes: Amiga or Blitz
  3501.  
  3502. This command switches the current screen from PAL to NTSC.
  3503.  
  3504.  
  3505. Function: DEPTH 
  3506. --------------------------------------------------------------------------
  3507. Syntax: Depth (Bitmap#) 
  3508. Modes: Amiga or Blitz
  3509.  
  3510. This function returns the depth of the specified Blitz2 bitmap object.
  3511.  
  3512.  
  3513. Statement: CLICKMOUSE 
  3514. --------------------------------------------------------------------------
  3515. Syntax: ClickMouse  
  3516. Modes: Amiga or Blitz
  3517.  
  3518. Similar to Mousewait, this command halts program execution until the 
  3519. user clicks the mouse.  There must must be a separate mouseclick for 
  3520. each CLICKMOUSE command, unlike Mousewait, which will continue through 
  3521. without pausing if the left mouse button was already being pressed.    
  3522.  
  3523. NOTE:  Avoid using this command in Amiga mode, as it seriously degrades 
  3524.        multitasking.
  3525.  
  3526.  
  3527.  
  3528. Function: CHIPFREE
  3529. --------------------------------------------------------------------------
  3530. Syntax: ChipFree 
  3531. Modes: Amiga or Blitz
  3532.  
  3533. This function will return the size, in bytes, of the largest block of
  3534. free CHIP memory in your system.
  3535.  
  3536. See Also:  FASTFREE , LARGESTFREE 
  3537.  
  3538.  
  3539. Function: FASTFREE 
  3540. --------------------------------------------------------------------------
  3541. Syntax: FastFree 
  3542. Modes: Amiga or Blitz
  3543.  
  3544. This function returns the size of the largest block of FAST memory.
  3545.  
  3546.  
  3547. Function: LARGESTFREE 
  3548. --------------------------------------------------------------------------
  3549. Syntax: LargestFree 
  3550. Modes: Amiga or Blitz
  3551.  
  3552. This function will return the size of the largest chunk of memory 
  3553. available. This memory may be FAST or CHIP, depending on your system.
  3554.  
  3555.  
  3556. Function: XOR
  3557. --------------------------------------------------------------------------
  3558. Syntax: Xor (expression,expression) 
  3559. Modes: Amiga or Blitz
  3560.  
  3561. Returns Exclusive OR of two expressions This function returns the 
  3562. "exclusive-OR" or the two supplied arguments. For example, Xor(255,170)
  3563. will return 85, and Xor(-1) will return 0.
  3564.  
  3565.  
  3566. Function: LARGEST.L 
  3567. --------------------------------------------------------------------------
  3568. Syntax: Largest.l (Long Integer1,Long Integer2)
  3569. Modes: Amiga or Blitz
  3570.  
  3571. This function will return the larger of the two supplied long integers.
  3572. For example, Largest.l(255,20045) would return 20045.
  3573.  
  3574.  
  3575. Function: SMALLEST.L 
  3576. --------------------------------------------------------------------------
  3577. Syntax: Smallest.l (Long Integer1,Long Integer2)
  3578. Modes: Amiga or Blitz
  3579.  
  3580. This function will return the smaller of two supplied long integers.
  3581. For example, Smallest.l(-999,5) would return -999.
  3582.  
  3583.  
  3584. Function: LARGEST.Q 
  3585. --------------------------------------------------------------------------
  3586. Syntax: Largest.q (Quick1,Quick2)
  3587. Modes: Amiga or Blitz
  3588.  
  3589. Identical to the function  LARGEST.L  except that
  3590. it accepts quick-type variables or expressions.
  3591.  
  3592.  
  3593. Function: SMALLEST.Q 
  3594. --------------------------------------------------------------------------
  3595. Syntax: Smallest.q (Quick1,Quick2)
  3596. Modes: Amiga or Blitz
  3597.  
  3598. Identical to  SMALLEST  but uses quick-types.
  3599.  
  3600.  
  3601. Function: LARGEST 
  3602. --------------------------------------------------------------------------
  3603. Syntax: Largest (Integer1,Integer2)
  3604. Modes: Amiga or Blitz
  3605.  
  3606. This is the fastest "Largest()" function.  Note that if passed floats
  3607. or quick-types, the fraction will be cut off.  See description for
  3608.  LARGEST.L  and  LARGEST.Q LARGESTQ}.
  3609.  
  3610.  
  3611. Function: SMALLEST 
  3612. --------------------------------------------------------------------------
  3613. Syntax: Smallest (Integer1,Integer2)
  3614. Modes: Amiga or Blitz
  3615.  
  3616. Like  SMALLEST.L  and  SMALLEST.Q SMALLESTQ}, with less accuracy, but faster than the long-integer and 
  3617. quick-type versions.
  3618.  
  3619.  
  3620. Function: AVG.L 
  3621. --------------------------------------------------------------------------
  3622. Syntax: Avg.l (Long Integer 1,Long Integer 2)
  3623. Modes: Amiga or Blitz
  3624.  
  3625. This function will return the average of two long-integers (although
  3626. the fraction is cut off.)  Thus, Avg.l(5,15)=10, and Avg.l(1,2)=1.
  3627. (Since fractions will be cut off with this function, you may wish to
  3628. use the quick-type version of this function for more accuracy.)
  3629.  
  3630.  
  3631. Function: AVG.Q 
  3632. --------------------------------------------------------------------------
  3633. Syntax: Avg.q (Quick1,Quick2)
  3634. Modes: Amiga or Blitz
  3635.  
  3636. See the description for  AVG.L .
  3637.  
  3638.  
  3639. Function: AVG 
  3640. --------------------------------------------------------------------------
  3641. Syntax: Avg (Integer1,Integer2)
  3642. Modes: Amiga or Blitz
  3643.  
  3644. See the description for  AVG.L .
  3645. This version is the fastest Avg() function available.
  3646.  
  3647.  
  3648. Statement: RRANDOMIZE 
  3649. --------------------------------------------------------------------------
  3650. Syntax: RRandomize Seed
  3651. Modes: Amiga or Blitz
  3652.  
  3653. Given a float-type expression or variable, RRandomize will "seed" the
  3654. reproducible random number generator.  The sequence of pseudo-random
  3655. numbers produced by  RRND  will be the same for each 
  3656. seed given it. If you require trully random numbers, try "RRandomize 
  3657. Ticks."
  3658.  
  3659.  
  3660. Function: RRND 
  3661. --------------------------------------------------------------------------
  3662. Syntax: RRnd (Low,High)
  3663. Modes: Amiga or Blitz
  3664.  
  3665. Given a range such as (1,6) this function will return a random number
  3666. based on the seed given it by  RRANDOMIZE   
  3667. These sets of "random" numbers can be repeated if you provide the same
  3668. seed.  This can be useful in games, etc. so that using "RRandomize 
  3669. Level#" and then using the RRnd() function to randomly draw the screen,
  3670. each time the player returns to that particular level, it will be the 
  3671. same.
  3672.  
  3673.  
  3674.  
  3675.                               ELMORE ARRAY LIBRARY
  3676.  
  3677.  
  3678. Function: INDEX
  3679. --------------------------------------------------------------------------
  3680. Syntax: Index List() 
  3681. Modes: Amiga or Blitz
  3682.  
  3683. Returns index from top of LIST This function will return the current 
  3684. index number of the supplied List() array passed to it.  For example, 
  3685. if the list pointer is currently at item 10 in the list, Index would 
  3686. return 10.
  3687.  
  3688.  
  3689. Statement or Function: REQUEST 
  3690. --------------------------------------------------------------------------
  3691. Syntax: Request (Title$,Text$,GadgetText$)
  3692. Modes: Amiga
  3693.  
  3694.  
  3695. This command is 2.0-specific.  If you're still using 1.3, 
  3696. this command will be unavailable to you.
  3697.  
  3698. "Request" can be used as both a command or a function.  You may
  3699. provide an optional title (or "" for default window title) a string
  3700. of text (separated by pipes "|" for each line) and a string containing
  3701. text for gadgets within the requester.  (Separate with "|" if you
  3702. need more than one.)
  3703. Used as a command, it merely displays the requester on the current
  3704. screen and waits for the user to click a gadget.  As a function, it
  3705. will also return a number corresponding to the gadget selected.
  3706. The gadget on the right should be reserved for negative responses
  3707. such as "CANCEL" or "NO" and will always return zero.  Other gadgets
  3708. will return values in the order that they appear, beginning with
  3709. 1 for the first gadget, 2 for the next, etc.
  3710.  
  3711.  
  3712. Function: ACTIVESCREEN 
  3713. --------------------------------------------------------------------------
  3714. Syntax: ActiveScreen
  3715. Modes: Amiga
  3716.  
  3717. This function returns ADDRESS of current Intuition screen.  This is
  3718. useful with many Intuition library commands, or to find out information
  3719. about the currently active screen.
  3720.  
  3721.  
  3722. Function: SCREENWIDTH 
  3723. --------------------------------------------------------------------------
  3724. Syntax: ScreenWidth  
  3725. Modes: Amiga
  3726.  
  3727. This function returns the pixelwidth of the currently active screen.
  3728.  
  3729.  
  3730. Function: SCREENHEIGHT 
  3731. --------------------------------------------------------------------------
  3732. Syntax: ScreenHeight  
  3733. Modes: Amiga
  3734.  
  3735. This function returns the pixelheight of the active screen
  3736.  
  3737.  
  3738. Function: ACTIVEWINDOW 
  3739. --------------------------------------------------------------------------
  3740. Syntax: ActiveWindow  
  3741. Modes: Amiga
  3742.  
  3743. This function returns the address of the current window.
  3744. This address is mainly used in conjunction with Intuition library
  3745. commands.
  3746.  
  3747.  
  3748. Statement or Function: WAITFOR 
  3749. --------------------------------------------------------------------------
  3750. Syntax: WaitFor (IDCMP Code)  
  3751. Modes: Amiga
  3752.  
  3753. Similar to WaitEvent, WAITFOR puts the Amiga to "sleep" until a 
  3754. specified IDCMP code wakes it up.  For example, WaitFor $400 would wait
  3755. until the user strikes a key, and WaitFor $8 would wait until the 
  3756. "close" gadget of the current window was clicked on.  These IDCMP codes 
  3757. are additive, so WaitFor $408 would wait until either the "close" gadget
  3758. was selected, or a key was pressed.  Refer to the section on "windows" 
  3759. in the Blitz2 Reference Manual for more information on IDCMP codes.
  3760.  
  3761.  
  3762. Statement: SHOWREQUESTERS 
  3763. --------------------------------------------------------------------------
  3764. Syntax: ShowRequesters OPTION>
  3765. Modes: Amiga or Blitz
  3766.  
  3767. OPTIONS:  0=Cancel all requesters
  3768.           1=Show requesters on Workbench Screen
  3769.           2=Direct requesters to current window
  3770.  
  3771. This command allows you to force system requesters like "Please insert
  3772. volume Foo in any drive" etc. to either be turned off, directed to the
  3773. workbench, or directed to the current window.  When requesters are 
  3774. turned off, the system will behave as if the "CANCEL" gadget was 
  3775. selected for each requester that would otherwise have been displayed.  
  3776. Be sure to re-activate requesters before exiting your program!
  3777.  
  3778.  
  3779.  
  3780. Function: CHECKSUM 
  3781. --------------------------------------------------------------------------
  3782. Syntax: Checksum (String$) 
  3783. Modes: Amiga or Blitz
  3784.  
  3785. Given a string, Checksum() will return a unique 32-bit integer as
  3786. a checksum, useful in situations such as serial transfers, etc. to
  3787. ensure both parties have the same data.
  3788.  
  3789.  
  3790. Function: CHARCOUNT 
  3791. --------------------------------------------------------------------------
  3792. Syntax: CharCount (String$,byte) 
  3793. Modes: Amiga or Blitz
  3794.  
  3795. This function will return the number of occurances of a given byte
  3796. within a string.  For example, CharCount(text$,32) will count the
  3797. number of spaces in text$.
  3798.  
  3799.  
  3800. Function: SEARCHBEGIN 
  3801. --------------------------------------------------------------------------
  3802. Syntax: SearchBegin (String$,byte,# from Begin) 
  3803. Modes: Amiga or Blitz
  3804.  
  3805. Similar to Instr(), SearchBegin will search the given string
  3806. for the specified byte.  For example, SearchBegin(a$,32,1)
  3807. will return the character position of the first space in a$,
  3808. while SearchBegin(a$,32,3) will return the position of the
  3809. third space.  If the byte is not found in the string, SearchBegin
  3810. will return a zero.
  3811.  
  3812.  
  3813. Function: SEARCHEND
  3814. --------------------------------------------------------------------------
  3815. Syntax: SearchEnd (String$,byte,# from End) 
  3816. Modes: Amiga or Blitz
  3817.  
  3818. Like SearchBegin() (above) except it searches from the end of
  3819. the string to the front.  For example, SearchBegin(a$,asc("A"),2)
  3820. will return the character position of the second-from-last letter
  3821. "A" in the string 'a$.'
  3822.  
  3823.  
  3824. Function: CIPHER$ 
  3825. --------------------------------------------------------------------------
  3826. Syntax: Cipher$ (String$) 
  3827. Modes: Amiga or Blitz
  3828.  
  3829. The Cipher$() function will encrypt or decrypt a string passed to it.
  3830. This is especially handy if you don't want users "zapping" your 
  3831. executeable or data files to read it's contents.  Note that Cipher$() 
  3832. can only decrypt strings previously created with Cipher$().
  3833.  
  3834.  
  3835. Function: NULL
  3836. --------------------------------------------------------------------------
  3837. Syntax: Null (String$)
  3838. Modes: Amiga or Blitz
  3839.  
  3840. Many Amiga shared libraries (like the DOS library) require addresses
  3841. of null-terminated strings as arguments.  This function will return
  3842. a long-integer address of a null-terminated string in memory for such
  3843. commands.
  3844.  
  3845.  
  3846. Function: REPEATS 
  3847. --------------------------------------------------------------------------
  3848. Syntax: Repeats (String$) 
  3849. Modes: Amiga or Blitz
  3850.  
  3851. This function will return the number of repeated bytes at the
  3852. beginning of your string.  Thus, Repeats("...Test") would return 3,
  3853. while Repeats("Example") would return 1.  If the string is null,
  3854. Repeats() will return zero.
  3855.  
  3856.  
  3857. Function: SPACE$
  3858. --------------------------------------------------------------------------
  3859. Syntax: SPACE$ (number of spaces)
  3860. Modes: Amiga or Blitz
  3861.  
  3862. This function is identical to the Space$ function in many other dialects
  3863. of BASIC.  It will return a string containing the desired number of
  3864. spaces, making it easier to align tables etc. to the screen or printer.
  3865.  
  3866.  
  3867. Function: BIN#
  3868. --------------------------------------------------------------------------
  3869. Syntax: Bin# (BinString$)
  3870. Modes: Amiga or Blitz
  3871.  
  3872. This function accepts binary value stored in a string and returns the
  3873. decimal value.
  3874.  
  3875.  
  3876. Function: HEX#
  3877. --------------------------------------------------------------------------
  3878. Syntax: Hex# (HexString$)
  3879. Modes: Amiga or Blitz
  3880.  
  3881. This function accepts hexadecimal value stored in a string and returns 
  3882. the decimal value.
  3883.  
  3884.  
  3885. Function: INTUITIONBASE 
  3886. --------------------------------------------------------------------------
  3887. Syntax: IntuitionBase  
  3888. Modes: Amiga or Blitz
  3889.  
  3890. Returns Intuition Library base
  3891.  
  3892.  
  3893. Function: DOSBASE 
  3894. --------------------------------------------------------------------------
  3895. Syntax: DosBase  
  3896. Modes: Amiga or Blitz
  3897.  
  3898. Returns DOS Library base
  3899.  
  3900.  
  3901. Function: GRAPHICSBASE 
  3902. --------------------------------------------------------------------------
  3903. Syntax: GraphicsBase  
  3904. Modes: Amiga or Blitz
  3905.  
  3906. Returns Graphics Library base
  3907.  
  3908.  
  3909. Function: FFPBASE 
  3910. --------------------------------------------------------------------------
  3911. Syntax: FFPBase  
  3912. Modes: Amiga or Blitz
  3913.  
  3914. Returns FFP Math Library base
  3915.  
  3916.  
  3917. Function: DISKFONTBASE 
  3918. --------------------------------------------------------------------------
  3919. Syntax: DiskFontBase  
  3920. Modes: Amiga or Blitz
  3921.  
  3922. Returns DiskFont Library base
  3923.  
  3924.  
  3925. Function: COMMODITIESBASE 
  3926. --------------------------------------------------------------------------
  3927. Syntax: CommoditiesBase  
  3928. Modes: Amiga or Blitz
  3929.  
  3930. Returns Commodities Library base
  3931.  
  3932.  
  3933. Function: ICONBASE 
  3934. --------------------------------------------------------------------------
  3935. Syntax: IconBase  
  3936. Modes: Amiga or Blitz
  3937.  
  3938. Returns Icon Library base
  3939.  
  3940.  
  3941. Function: REXXSYSBASE 
  3942. --------------------------------------------------------------------------
  3943. Syntax: RexxSysBase  
  3944. Modes: Amiga or Blitz
  3945.  
  3946. Returns RexxSys Library base
  3947.  
  3948.  
  3949.                              Blitz2 Guidefile Info
  3950. -------------------------------------------------------------------------
  3951.  
  3952.                    BlitzBasic is copyrighted to Acid Software
  3953.                    ==========================================
  3954.  
  3955. I created this file because I was sick of loading everytime the doc 
  3956. files in the background. So I started to do some typing and block 
  3957. cutting with the original doc files delivered with the libs.
  3958.  
  3959. I'm glad that these library's are created because they make Blitz2 a lot
  3960. better and more usefull.
  3961.  
  3962.            You can contact me on internet if needed: j.valks@sbos.nl
  3963.  
  3964. Special thanks are going to Simon Armstrong of Acid Software for giving
  3965. me the BUM ascii files. Thanks!
  3966.  
  3967.                                   Written by:
  3968.  
  3969.                           Jurgen Valks (BlitzUser 418)
  3970.                                   Kerkeind 8a
  3971.                              5293 AB  Gemonde (NB) 
  3972.                                 The Netherlands
  3973.  
  3974. This file is to big now! I gonna make a other file with commands and
  3975. syntax only...
  3976.  
  3977.  
  3978.                                  Choose a item:
  3979.  
  3980.  AMIGA SUPPORT LIBRARY     (BUM 6)      PALETTE LIBRARY ADDITIONS (BUM 5) 
  3981.  ANIM LIBRARY              (BUM 2)      SCREEN  LIBRARY ADDITIONS (BUM 5) 
  3982.  AREXX LIBRARY             (BUM 2)      WINDOW  LIBRARY ADDITIONS (BUM 5) 
  3983.  CONSOLE LIBRARY           (BUM 6)      NEW SCREEN FLAGS          (BUM 4) 
  3984.  CRUNCH LIBRARY            (BUM 6)      
  3985.  ELMORE LIBRARY            (BUM 6)      AGA PALETTE HANDLING      (BUM 4) 
  3986.  LOCALE LIBRARY            (BUM 6)      3.0 BITMAP  HANDLING      (BUM 4) 
  3987.  MED LIBRARY               (BUM 2)      NEW GADGET  HANDLING      (BUM 4) 
  3988.  PRINTER LIBARY            (BUM 6)      
  3989.  SERIALPORT LIBRARY        (BUM 2)      DATE & TIME COMMANDS      (BUM 4) 
  3990.  THE NEW DISPLAY LIBRARY   (BUM 5)      ENVIRONMENT COMMANDS      (BUM 4) 
  3991.  THE NEW ASL LIBRARY       (BUM 5)      NEW DRAWING COMMANDS      (BUM 4) 
  3992.  THE GADTOOLS LIBRARY      (BUM 5)       
  3993.  
  3994.  MISC ADDITIONS            (BUM X) 
  3995.  
  3996.  
  3997.                                 MISC ADDITIONS
  3998.  
  3999.             These are misc commands added in several BUM magazines:
  4000.  
  4001.                                    BLITCOLL     
  4002.                                    BLOCK        
  4003.                                    EXISTS       
  4004.                                    ILBMVIEWMODE 
  4005.                                    LOADFONT     
  4006.                                    LOADSHAPE    
  4007.                                    REMAP        
  4008.                                    RUNERRSOFF   
  4009.                                    RUNERRSON    
  4010.                                    SETBPLCON0   
  4011.                                    SHAPEGADGET  
  4012.                                    SHOWBITMAP   
  4013.                                    SORTLIST     
  4014.                                    SPRITEMODE   
  4015.                                    VPOS         
  4016.  
  4017.  
  4018. Statement: SortList
  4019. --------------------------------------------------------------------------
  4020. Syntax: SortList Arrayname()
  4021.  
  4022. The SortList command is used to rearrange the order of elements in a 
  4023. Blitz2 linked list. The order in which the items are sorted depends on 
  4024. the first field of the linked list type which must be a single integer 
  4025. word. Sorting criteria will be extended in future releases.
  4026.  
  4027.  
  4028. Statement: LoadFont
  4029. --------------------------------------------------------------------------
  4030. Syntax: LoadFont IntuiFont#,Fontname.font$,Y size [,style]
  4031.  
  4032. The LoadFont command has been extended with an optional style
  4033. parameter. The following constants may be combined:
  4034.  
  4035. #underlined=1
  4036. #bold=2
  4037. #italic=4
  4038. #extended=8 ;wider than normal
  4039. #colour=64  ;hmm use colour version I suppose
  4040.  
  4041.  
  4042. Statement: SpriteMode
  4043. --------------------------------------------------------------------------
  4044. Syntax: SpriteMode mode
  4045.  
  4046. For use with the capabilities of the new Display library SpriteMode is 
  4047. used to define the width of sprites to be used in the program. The mode
  4048. values 0, 1 and 2 correspong to the widths 16, 32 and 64.
  4049.  
  4050.  
  4051. Function: Exists
  4052. --------------------------------------------------------------------------
  4053. Syntax: Exists (FileName$)
  4054.  
  4055. Exists actually returns the length of the file, if 0 the file either 
  4056. does not exist or is empty or is perhaps not a file at all! Hmmm, 
  4057. anyway the following poke turns off the "Please Insert Volume Blah:" 
  4058. requester so you can use Exists to wait for disk changes:
  4059.  
  4060.      Poke.l Peek.l(Peek.l(4)+276)+184,-1
  4061.  
  4062.  
  4063. Statements: Runerrson & Runerrsoff
  4064. --------------------------------------------------------------------------
  4065. Syntax: Runerrson & Runerrsoff
  4066.  
  4067. These two new compiler directives are for enabling and disabling error
  4068. checking in different parts of the program, they override the settings 
  4069. in Compiler Options.
  4070.  
  4071.  
  4072. Statement: Block
  4073. --------------------------------------------------------------------------
  4074. Syntax: Block Shape#,X,Y
  4075. Modes: Amiga/Blitz
  4076.  
  4077. Description:
  4078. Block is an extremely fast version of the Blit command with some 
  4079. restrictions. Block should only be used with shapes that are 16,32,48,
  4080. 64... pixels wide and that are being blitted to an x position of 0,16,
  4081. 32,48,64... 
  4082.  
  4083. Note that the height and y destination of the shape are not limited by
  4084. the Block command. Block is intended for use with map type displays.
  4085.  
  4086.  
  4087. Statement: LoadFont  
  4088. --------------------------------------------------------------------------
  4089. Syntax: LoadFont IntuiFont#,Fontname.font$,Y Size
  4090. Modes: Amiga
  4091.  
  4092. Description:
  4093. LoadFont is used to load a font from the fonts: directory. Unlike 
  4094. BlitzFonts any size IntuiFont can be used. The command WindowFont is 
  4095. used to set text output to a certain IntuiFont in a particular Window.
  4096.  
  4097.  
  4098. Function: VPos     (add to chapter 5)
  4099. --------------------------------------------------------------------------
  4100. Syntax: VPos
  4101. Modes: Amiga/Blitz
  4102.  
  4103. Description:
  4104. VPos returns the video's beam vertical position. Useful in both high-
  4105. speed animation where screen update may need to be synced to a certain 
  4106. video beam position (not just the top of frame as with VWait) and for a
  4107. fast random nember generator in non frame-synced applications.
  4108.  
  4109.  
  4110. The Anim.lib
  4111.  
  4112. The following 4 commands allow the display of Animations in Blitz BASIC. 
  4113. The Animation must be compatible with the DPaint 3 format, this method 
  4114. uses long delta (type 2) compression and does not include any palette 
  4115. changes.
  4116.                                The Anim Commands:
  4117.  
  4118.                                     LOADANIM   
  4119.                                     INITANIM   
  4120.                                     NEXTFRAME 
  4121.                                     FRAMES    
  4122.  
  4123. Anims in nature use a double buffered display, with the addition of the 
  4124. ShowBitMap command to Blitz we can now display (play) Anims in both 
  4125. Blitz and Amiga modes. An Anim consists of an initial frame which needs
  4126. to be displayed (rendered) using the InitAnim command, subsequent frames
  4127. are then played by using the NextFrame command. The Frames() function 
  4128. returns the number of frames of an Anim. We have also extended the 
  4129. LoadShape command to support Anim brushes. The following example loads 
  4130. and plays an Anim on a standard Amiga (Intuition) Screen.
  4131.  
  4132. ;play anim example
  4133. ;anim file name could use f$=par$(1) to play anim from cli
  4134. f$="test.anim"
  4135. ;open screen same resolution as animation 
  4136.  
  4137. ILBMInfo f$ 
  4138. Screen 0,0,0,ILBMWidth,ILBMHeight,ILBMDepth,ILBMViewMode,"",1,2 
  4139. ScreensBitMap 0,0 
  4140.  
  4141. ;an extra bitmap same size as screensbitmap for double buffering
  4142.  
  4143. BitMap 1,ILBMWidth,ILBMHeight,ILBMDepth 
  4144.  
  4145. ;load anim and set screen colours to same as animation
  4146.  
  4147. LoadAnim 0,f$,0:Use Palette 0 
  4148.  
  4149. ;draws first frame to current bitmap (1) and bitmap #0
  4150.  
  4151. InitAnim 0,0
  4152. While Joyb(0)=0 
  4153.       ShowBitMap db        ;tell intuition which bitmap to display
  4154.       VWait                ;wait for top of frame 
  4155.       db=1-db              ;swap current bitmap 
  4156.       Use BitMap db 
  4157.       NextFrame 0          ;and draw next frame 
  4158. Wend
  4159.  
  4160.  
  4161. Statement: LoadAnim
  4162. --------------------------------------------------------------------------
  4163. Syntax: LoadAnim Anim#,FileName$[,Palette#]
  4164. Modes: Amiga
  4165.  
  4166. Description:
  4167. The LoadAnim command will create an Anim object and load a DPaint 
  4168. compatible animation. The ILBMInfo command can be used to find the 
  4169. correct screensize and resolution for the anim file. The optional 
  4170. Palette# parameter can be used to load a palette with the anims correct
  4171. colours. 
  4172.  
  4173. Notes:
  4174. unlike more advanced anim formats DPaint anims use a single static 
  4175. palette for the entire animation. Like all other Blitz commands that
  4176. access files the command must be executed in Amiga mode.
  4177.  
  4178.  
  4179. Statement: InitAnim
  4180. --------------------------------------------------------------------------
  4181. Syntax: InitAnim Anim#[,Bitmap#]
  4182. Modes: Amiga/Blitz
  4183.  
  4184. Description:
  4185. InitAnim renders the first two frames of the Anim onto the current 
  4186. BitMap and the BitMap specified by the second parameter. The second 
  4187. BitMap# parameter is optional, this is to support Anims that are not in
  4188. a double-buffered format (each frame is a delta of the last frame not 
  4189. from two frames ago). However, the two parameter double buffered form of
  4190. InitAnim should always be used. (hmmm don't ask me O.K.!)
  4191.  
  4192.  
  4193. Statement: NextFrame
  4194. --------------------------------------------------------------------------
  4195. Syntax: NextFrame Anim#
  4196. Modes: Amiga/Blitz
  4197.  
  4198. Description:
  4199. NextFrame renders the nextframe of an Anim to the current BitMap. If 
  4200. the last frame of an Anim has been rendered NextFrame will loop back to 
  4201. the start of the Animation.
  4202.  
  4203.  
  4204. Function: Frames
  4205. --------------------------------------------------------------------------
  4206. Syntax: Frames (Anim#)
  4207.  
  4208. Description:
  4209. The Frames() function returns the number of frames in the specified 
  4210. Anim.
  4211.  
  4212.  
  4213. Statement: ShowBitMap
  4214. --------------------------------------------------------------------------
  4215. Syntax: ShowBitMap [BitMap#]
  4216. Modes: Amiga
  4217. Library: ScreensLib
  4218.  
  4219. Description:
  4220. The ShowBitMap command is the Amiga-mode version of the Show command. It
  4221. enables you to change a Screens bitmap allowing double buffered (flicker 
  4222. free) animation to happen on a standard Intuition Screen.
  4223.  
  4224. Unlike Blitz mode it is better to do ShowBitMap then VWait to sync up 
  4225. with the Amiga's display, this will make sure the new bitmap is being 
  4226. displayed before modifying the previous BitMap.
  4227.  
  4228.  
  4229. Function: BlitColl
  4230. --------------------------------------------------------------------------
  4231. Syntax: BlitColl (Shape#,x,y)
  4232. Modes: Amiga/Blitz
  4233.  
  4234. Description:
  4235. BlitColl is a fast way of collision detection when blitting shapes. 
  4236. BlitColl returns -1 if a collision occurs, 0 if no collision. A 
  4237. collision occurs if any pixel on the current BitMap is non zero where 
  4238. your shape would have been blitted.
  4239.  
  4240. ShapesHit is faster but less accurate as it checks only the rectangular 
  4241. area of each shape, where as BlitColl takes into account the shape of 
  4242. the shape and of course1bcan not tell you what shapeyou have collided 
  4243. with.
  4244.  
  4245. Note: make sure only things that you want to 
  4246. collide with have been drawn on the BitMap e.g. don't Blit your ship and
  4247. then try BlitColl!
  4248.  
  4249.  
  4250. Statement: ILBMViewMode
  4251. --------------------------------------------------------------------------
  4252. Syntax: ILBMViewMode
  4253. Modes: Amiga/Blitz
  4254. Library: ILBMIFFLib
  4255.  
  4256. Description:
  4257. ILBMViewMode returns the viewmode of the file that was processed by 
  4258. ILBMInfo. This is useful for opening a screen in the right mode before 
  4259. using LoadScreen etc. The different values of ViewMode are as follows 
  4260. (add/or them for different combinations):
  4261.  
  4262. 32768 ($8000) hires  
  4263. 2048  ($0800) ham   
  4264. 128   ($0080) halfbright     
  4265. 4     ($0004) interlace     
  4266. 0     ($0000) lores
  4267.  
  4268. See Also:  ILBMINFO 
  4269.  
  4270. Example:
  4271.  
  4272. ;
  4273. ;ilbminfo example 
  4274. ;
  4275. ;iff file name could use f$=par$(1) to use cli argument 
  4276. f$="test.iff" 
  4277. ;get ilbm information 
  4278. ILBMInfo f$ 
  4279. ;open screen with correct parameters
  4280. Screen 0,0,0,ILBMWidth,ILBMHeight,ILBMDepth,ILBMViewMode,"",1,2 
  4281. ;load the iff onto the screens
  4282. LoadScreen 0,f$,0 
  4283. ;set the palette
  4284. Use Palette 0 
  4285. MouseWait 
  4286.  
  4287.  
  4288. Statement: LoadShape
  4289. --------------------------------------------------------------------------
  4290. Syntax: LoadShape Shape#,Filename$[,Palette#]
  4291. Modes: Amiga
  4292.  
  4293. Description:
  4294. The LoadShape command has now been extended to support anim brushes, if 
  4295. the file is an anim brush the shapes are loaded into consecutive shapes 
  4296. starting with the Shape# provided.
  4297.  
  4298.  
  4299. Statement: ReMap
  4300. --------------------------------------------------------------------------
  4301. Syntax: ReMap colour#0,colour#1[,Bitmap]
  4302. Modes: Amiga/Blitz
  4303. Library: Sis2dLib
  4304.  
  4305. Description:
  4306. ReMap is used to change all the pixels on a BitMap in one colour to 
  4307. another colour. The optional BitMap parameter will copy all the pixels 
  4308. in Colour#0 to their new colour on the new bitmap.
  4309.  
  4310.  
  4311. Statement: ShapeGadget
  4312. --------------------------------------------------------------------------
  4313. Syntax: ShapeGadget GadgetList#,X,Y,Flags,Id,Shape#[,Shape#]
  4314. Mode: Amiga
  4315.  
  4316. Description:
  4317. The ShapeGadget command allows you to create gadgets with graphic 
  4318. imagery. The Shape# parameter refers to a shape object containing the 
  4319. graphics you wish the gadget to contain.
  4320.  
  4321. The ShapeGadget command has been extended to allow an alternative image 
  4322. to be displayed when the gadget is selected. All other parameters are 
  4323. identical to those in TextGadget.
  4324.  
  4325. Example:
  4326.  
  4327. ;ShapeGadget example
  4328. Screen 0,3
  4329. ScreensBitMap 0,0 
  4330. ;generate 2 shapes for our shape gadget 
  4331. Cls:Circlef 15,15,15,2:Circlef 8,8,9,5,3:Circlef 24,8,9,2,3 
  4332. GetaShape 1,0,0,32,32:Circlef 24,8,9,5,3:GetaShape 0,0,0,32,32
  4333. ;
  4334. ShapeGadget 0,148,50,0,1,0,1
  4335. TextGadget 0,140,180,0,2,"EXIT" 
  4336. Window 0,0,0,320,200,$100f,"ClickMe",1,2,0
  4337.  
  4338. Repeat
  4339. Until WaitEvent=64 AND GadgetHit=2
  4340.  
  4341.  
  4342. Statement: SetBPLCON0
  4343. --------------------------------------------------------------------------
  4344. Syntax: SetBPLCON0 Default
  4345. Modes: Amiga/Blitz
  4346.  
  4347. Description:
  4348. The SetBPLCON0 command has been added for advanced control of Slice 
  4349. display modes. The BPLCON0 hardware register is on page A4-1 of the 
  4350. reference manual (appendix 4). The bits of interest are as follows:
  4351.  
  4352. bit#1-ERSY external sync (for genlock enabling)
  4353. bit#2-LACE interlace mode
  4354. bit#3-LPEN light pen enable
  4355.  
  4356. Example:
  4357.  
  4358. ; Blitz Interlaced Slice Example using BPLCON0
  4359. BitMap 0,640,512,4
  4360. ; use SetBPLCON0 4 to set the lace bit on when slice is created 
  4361. SetBPLCON0 4                               ;set lace bit
  4362.  
  4363. BLITZ 
  4364. ;bitmap width=1280 so slice's bitmap modulos miss each 2nd line 
  4365. Slice 0,44,640,256,$fffb,4,8,8,1280,1280   ;cludge the modulo 
  4366. ;every vertical blank either show odd lines or even lines 
  4367. ;depending on the long frame bit of VPOSR hardware register 
  4368. SetInt 5
  4369.     If Peek($dff004)<0 Show 0,0,0 Else Show 0,0,1 
  4370. End SetInt
  4371. ;draw lines to prove it 
  4372. For i=1 To 1000 
  4373.     Line Rnd(640),Rnd(512),Rnd(640),Rnd(512),Rnd(16)
  4374. Next
  4375. ;
  4376. MouseWait 
  4377.  
  4378.  
  4379. Speak Commands
  4380.  
  4381.  
  4382. The Amiga speech synthesiser can be activated using the following 
  4383. commands. The narrator.device has been upgraded in Workbench2.0 
  4384. increasing the quality of the speech. With a bit of messing around you 
  4385. can have a lot of fun with the Amiga's 'voice', Also note that these are
  4386. compatible with the commands used in BlitzUser1's speech program.
  4387.  
  4388. Speak Commands:
  4389.  
  4390.                               SPEAK         
  4391.                               SETVOICE      
  4392.                               TRANSLATE$    
  4393.                               PHONETICSPEAK 
  4394.                               VOICELOC      
  4395.  
  4396.  
  4397. Statement: Speak
  4398. --------------------------------------------------------------------------
  4399. Syntax: Speak string$
  4400. Modes: Amiga
  4401.  
  4402. Description:
  4403. The Speak command will first convert the given string to phonetics and 
  4404. then pass it to the Narrator.Device. Depending on the settings of the 
  4405. Narrator device (see  SETVOICE ) the Amiga will 
  4406. "speak" the string you have sent in the familiar Amiga synthetic voice.
  4407.  
  4408. Example:
  4409.  
  4410. NPrint "Type something and hit return..." 
  4411. NPrint "(just return to exit)"
  4412. Repeat
  4413.   a$=Edit$(80)
  4414.   Speak a$
  4415. Until a$="" 
  4416.  
  4417.  
  4418. Statement: SetVoice
  4419. --------------------------------------------------------------------------
  4420. Syntax: SetVoice rate,pitch,expression,sex,volume,frequency
  4421. Modes: Amiga
  4422.  
  4423. Description:
  4424. SetVoice alters the sound of the Amiga's speech synthsiser by changing:
  4425.  
  4426. Rate:       measured in words per minute. Default 150, range 40-400.
  4427. Pitch:      the BaseLine pitch in Hz. Default 110, range 65-320
  4428. Expression: 0=robot 1=natural 2=manual        
  4429. Sex:        0=male 1=female     
  4430. Volume:     0 to 64       
  4431. Frequency:  samples per second (22200)
  4432.  
  4433. As the following example shows you could very well rename the Speak 
  4434. command the Sing command!
  4435. ;
  4436. ; sing the praises of Blitz BASIC!
  4437. ;
  4438. While Joyb(0)=0 
  4439.   Pitch=65+Rnd(255) 
  4440.   rate=100+Rnd(200) 
  4441.   SetVoice rate,pitch,1,1,64,22200
  4442.   Speak "BLITZ BASIC" 
  4443. Wend
  4444.  
  4445.  
  4446. Function: Translate$
  4447. --------------------------------------------------------------------------
  4448. Syntax: Translate$(string$)
  4449. Modes: Amiga
  4450.  
  4451. Description:
  4452. Translate$() returns the phonetic equivalent of the string for use with
  4453. the Translate
  4454.  
  4455. Example:
  4456.  
  4457. Print "Enter a Sentence ":a$=Edit$(80)
  4458. NPrint "Phonetic=",Translate$(a$) 
  4459. MouseWait 
  4460.  
  4461.  
  4462. Statement: PhoneticSpeak
  4463. --------------------------------------------------------------------------
  4464. Syntax: PhoneticSpeak phonetic$
  4465. Modes: Amiga
  4466.  
  4467. Description:
  4468. PhoneticSpeak is similar to the Speak command but should only be passed 
  4469. strings containing legal phonemes such as that produced by the 
  4470. Translate$() function.
  4471.  
  4472.  
  4473. Function: VoiceLoc
  4474. --------------------------------------------------------------------------
  4475. Syntax: VoiceLoc
  4476. Modes: Amiga
  4477.  
  4478. Description:
  4479. VoiceLoc returns a pointer to the internal variables in the speech 
  4480. synthesiser that enable the user to access new parameters added to the 
  4481. V37 Narrator Device. Formants as referred to in the descriptions are the
  4482. major vocal tracts and are separated into the parts of speech that 
  4483. produce the bass, medium and trebly sounds.
  4484.  
  4485. The new paramters are as listed
  4486.                
  4487. \flags                : set to 1 if using extended commands
  4488. \f0enthusiasm         : amount of pitch difference on accents default=32
  4489. \f0perturb            : amount of "wurble" ie random shake default=0
  4490. \f1adj,\f2adj,\f3adj  : pitch adjust for low medium and high frequency
  4491.                         formants. 0=default
  4492. \a1adj,\a2adj,\a3adj  : amplitude adjust for low medium and high
  4493.                         frequency formants 0=default
  4494. \articulate           : speed of articulation 100=default
  4495. \centralize           : amount of the centphon vowel in other vowels
  4496.                         0=default
  4497. \centphon             : a vowel to which all others are adjusted by the
  4498. \centralize           : variable,
  4499.                         (limited to IY,IH,EH,AE,AA,AH,AO,OW,UH,ER and 
  4500.                          UW) 
  4501. \AVbias,\AFbias       : amount of bias added to voiced and unvoiced 
  4502.                         speech sounds, (y,r,w,m vs st,sh,f). 
  4503. \priority             : task priority when speaking 100=default
  4504.  
  4505. Example:
  4506.  
  4507. ; voiceloc() example
  4508.  
  4509. NEWTYPE .voicepars          ;new V37 parameters available 
  4510.       flags.b 
  4511.       f0enthusiasm:f0perturb
  4512.       f1adj:f2adj:f3adj 
  4513.       a1adj:a2adj:a3adj 
  4514.       articulate:centralize:centphon$ 
  4515.       avbias.b:afbias:priority:pad1 
  4516. End NEWTYPE 
  4517.  
  4518. *v.voicepars=VoiceLoc 
  4519.  
  4520. *v\flags=1
  4521. *v\f0enthusiasm=82,90 ;old aged highly excited voice
  4522. *v\f1adj=0,0,0    ;these are fun to mess with 
  4523. *v\a1adj=0,0,0
  4524. *v\centralize=50,"AO" ;no effect
  4525. *v\articulate=90
  4526. *v\avbias=20,20 
  4527.  
  4528. Speak "COME ON EVERYBODY, DANCE? boom boom !" 
  4529. End
  4530.  
  4531.  
  4532.                                The MED commands:
  4533.  
  4534.                        LOADMEDMODULE            SETMEDVOLUME 
  4535.                        STARTMEDMODULE           GETMEDVOLUME 
  4536.                        PLAYMED                  GETMEDNOTE   
  4537.                        STOPMED                  GETMEDINSTR  
  4538.                        JUMPMED                  SETMEDMASK   
  4539.  
  4540.  
  4541. Statement: LoadMedModule
  4542. --------------------------------------------------------------------------
  4543. Syntax: LoadMedModule MedModule# Name
  4544. Modes: Amiga
  4545.  
  4546. Description:
  4547. The LoadMedModule command loads any version 4 channel Octamed module. 
  4548. The following routines support upto and including version 3 of the 
  4549. Amiganut's Med standard.
  4550.  
  4551. The number of MedModules loaded in memory at one time is only limited 
  4552. by the MedModules maximum set in the Blitz2 Options requester. Like any 
  4553. Blitz commands that access files LoadMedModule can only be used in 
  4554. AmigaMode.
  4555.  
  4556.  
  4557. Statement: StartMedModule
  4558. --------------------------------------------------------------------------
  4559. Syntax: StartMedModule MedModule#
  4560. Modes: Amiga/Blitz
  4561.  
  4562. Description:
  4563. StartMedModule is responsible for initialising the module including 
  4564. linking after it is loaded from disk using the LoadMedModule command. It
  4565. can also be used to restart a module from the beginning.
  4566.  
  4567.  
  4568. Statement: PlayMed
  4569. ---------------------------------------------------------------------------
  4570. Modes: Amiga/Blitz
  4571.  
  4572. Description:
  4573. PlayMed is responsible for playing the current MedModule, it must be 
  4574. called every 50th of a second either on an interupt (#5) or after a 
  4575. VWait in a program loop.
  4576.  
  4577.  
  4578. Statement: StopMed
  4579. --------------------------------------------------------------------------
  4580. Syntax: StopMed
  4581. Modes: Amiga/Blitz
  4582.  
  4583. Description:
  4584. StopMed will cause any med module to stop playing. This not only means 
  4585. that PlayMed will have no affect until the next StartMedModule but 
  4586. silences the audio channels so they are not left ringing as is the 
  4587. effect when PlayMed is not called every vertical blank.
  4588.  
  4589.  
  4590. Statement: JumpMed
  4591. --------------------------------------------------------------------------
  4592. Syntax: JumpMed Pattern#
  4593. Modes: Amiga/Blitz
  4594.  
  4595. Description:
  4596. JumpMed will change the pattern being played in the current module.
  4597.  
  4598.  
  4599. Statement: SetMedVolume
  4600. --------------------------------------------------------------------------
  4601. Syntax: SetMedVolume Volume
  4602. Modes: Amiga/Blitz
  4603.  
  4604. Description:
  4605. SetMedVolume changes the overall volume that the Med Library plays the 
  4606. module, all the audio channels are affected. This is most useful for 
  4607. fading out music by slowly decreasing the volume from 64 to 0.
  4608.  
  4609.  
  4610. Function: GetMedVolume
  4611. --------------------------------------------------------------------------
  4612. Syntax: GetMedVolume Channel#
  4613. Modes: Amiga/Blitz
  4614.  
  4615. Description:
  4616. GetMedVolume returns the current volume setting of the specified audio 
  4617. channel. This is useful for graphic effects that you may wish to sync 
  4618. to certain channels of the music playing.
  4619.  
  4620.  
  4621. Function: GetMedNote
  4622. --------------------------------------------------------------------------
  4623. Syntax: GetMedNote Channel#
  4624. Modes: Amiga/Blitz
  4625.  
  4626. Description:
  4627. GetMedNote returns the current note playing from the specified channel.
  4628. As with GetMedVolume this is useful for producing graphics effects 
  4629. synced to the music the Med Library is playing.
  4630.  
  4631.  
  4632. Function: GetMedInstr
  4633. --------------------------------------------------------------------------
  4634. Syntax: GetMedInstr Channel
  4635. Modes: Amiga/Blitz
  4636.  
  4637. Description:
  4638. GetMedInstr returns the current instrument playing through the specified
  4639. audio channel.
  4640.  
  4641.  
  4642. Statement: SetMedMask
  4643. --------------------------------------------------------------------------
  4644. Syntax: SetMedMask Channel Mask
  4645. Modes: Amiga/Blitz
  4646.  
  4647. Description:
  4648. SetMedMask allows the user to mask out audio channels needed by sound 
  4649. effects stopping the Med Library using them.
  4650.  
  4651.  
  4652. Serial Port Commands
  4653.  
  4654. The following are a set of commands to drive both the single RS232 
  4655. serial port on an Amiga as well as supporting multiserial port cards 
  4656. such as the A2232 card. The unit# in the following commands should be 
  4657. set to 0 for the standard RS232 port, unit 1 refers to the default 
  4658. serial port set by the advanced serial preferences program and unit 2 
  4659. on refer to any extra serial ports available.
  4660.  
  4661.                              Serial Port Commands:
  4662.  
  4663.                             OPENSERIAL        
  4664.                             WRITESERIAL       
  4665.                             WRITESERIALSTRING 
  4666.                             READSERIAL        
  4667.                             READSERIALSTRING  
  4668.                             CLOSESERIAL       
  4669.                             SETSERIALBUFFER   
  4670.                             SETSERIALLENS     
  4671.                             SETSERIALPARAMS   
  4672.                             SERIALEVENT       
  4673.  
  4674.  
  4675. Function: OpenSerial
  4676. --------------------------------------------------------------------------
  4677. Syntax: OpenSerial device$,unit#,baud,io_serflags
  4678. Modes: Amiga
  4679.  
  4680. Description:
  4681. OpenSerial is used to configure a Serial Port for use. As with OpenFile, 
  4682. OpenSerial is a function and returns zero if it fails. If it succeeds 
  4683. advanced users may note the return result is the location of the IOExtSer 
  4684. structure. 
  4685.  
  4686. Use "serial.device" for device$. 
  4687.  
  4688. The baud rate should be in the range of 110-292,000. The io_serflags 
  4689. parameter includes the following flags:
  4690.  
  4691. bit7: #serf_xdisabled=128 ; disable xon/xoff 
  4692. bit6: #serf_eofmode=64    ; enable eof checking 
  4693. bit5: #serf_shared=32     ; set if you don't need exclusive use of port
  4694. bit4: #serf_rad_boogie=16 ; high speed mode 
  4695. bit3: #serf_queuedbrk=8   ; if set, a break command waits for buffer
  4696.                             empty
  4697. bit2: #serf_7wire=4       ; if set, use 7 wire RS232
  4698. bit1: #serf_parity_odd=2  ; select odd parity (even if not set) 
  4699. bit0: #serf_parity_on=1   ; enable parity checking
  4700.  
  4701.  
  4702. Statement: WriteSerial
  4703. --------------------------------------------------------------------------
  4704. Syntax: WriteSerial unit#,byte
  4705. Modes: Amiga
  4706.   
  4707. Description:
  4708. WriteSerial sends one byte to the serial port. Unit# defines which 
  4709. serial port is used. If you are sending characters use the Asc() 
  4710. function to convert the character to a byte e.g. WriteSerial 0,asc("b").
  4711.  
  4712.  
  4713. Statement WriteSerialString
  4714. --------------------------------------------------------------------------
  4715. Syntax: WriteSerialString unit#,string
  4716. Modes: Amiga
  4717.  
  4718. Description:
  4719. WriteSerialString is similar to WriteSerial but sends a complete string
  4720. to the serial port.
  4721.  
  4722.  
  4723. Function: ReadSerial
  4724. --------------------------------------------------------------------------
  4725. Syntax: ReadSerial (unit#)  returns -1 if nothing waiting
  4726. Modes: Amiga
  4727.  
  4728. Description:
  4729. ReadSerial returns the next byte waiting in the serial port's read 
  4730. buffer. If the buffer is empty it returns a -1. It is best to use a word
  4731. type (var.w=ReadSerial(0)) as a byte will not be able to differentiate 
  4732. between -1 and 255.
  4733.  
  4734.  
  4735. Function: ReadSerialString
  4736. --------------------------------------------------------------------------
  4737. Syntax: ReadSerialString (unit#)
  4738. Modes: Amiga
  4739.  
  4740. Description:
  4741. ReadSerialString puts the serial port's read buffer into a string, if 
  4742. the buffer is empty the function will return a null string (length=0).
  4743.  
  4744.  
  4745. Statement: CloseSerial
  4746. --------------------------------------------------------------------------
  4747. Syntax: CloseSerial unit#
  4748. Modes: Amiga
  4749.  
  4750. Description:
  4751. The CloseSerial command will close the port, enabling other programs to
  4752. use it. 
  4753.  
  4754. Note: Blitz will automatically close all ports that are opened when a program 
  4755. ends.
  4756.  
  4757.  
  4758. Statement SetSerialBuffer
  4759. --------------------------------------------------------------------------
  4760. Modes: Amiga
  4761.  
  4762. Description:
  4763. SetSerialBuffer changes the size of the ports read buffer. This may be 
  4764. useful if your program is not always handling serial port data or is 
  4765. receiving and processing large chunks of data. The smallest size for 
  4766. the internal serial port (unit#0) is 64 bytes. The bufferlength variable
  4767. is in bytes.
  4768.  
  4769.  
  4770. Statement: SetSerialLens
  4771. --------------------------------------------------------------------------
  4772. Syntax: SetSerialLens unit#,readlen,writelen,stopbits
  4773. Modes: Amiga
  4774.  
  4775. Description:
  4776. SetSerialLens allows you to change the size of characters read and 
  4777. written by the serial device. Generally readlen=writelen and should be
  4778. set to either 7 or 8, stopbits should be set to 1 or 2. 
  4779.  
  4780. Default values are 8,8,1.
  4781.  
  4782.  
  4783. Statement: SetSerialParams
  4784. --------------------------------------------------------------------------
  4785. Syntax: SetSerialParams unit#
  4786. Modes: Amiga
  4787.   
  4788. Description:
  4789. For advanced users, SetSerialParams tells the serial port when 
  4790. parameters are changed. This would only be necesary if they were changed
  4791. by poking offsets from IOExtSer which is returned by the OpenSerial 
  4792. command.
  4793.  
  4794.  
  4795. Function: SerialEvent
  4796. --------------------------------------------------------------------------
  4797. Syntax: SerialEvent (unit#)
  4798. Modes: Amiga
  4799.  
  4800. Description:
  4801. SerialEvent is used when your program is handling events from more than
  4802. 1 source, Windows, ARexx etc. 
  4803.  
  4804. This command is currently not implemented
  4805.  
  4806.  
  4807.                     Here's a overview of the Arexx Commands:
  4808.  
  4809.                      CREATEMSGPORT              REPLYREXXMSG       
  4810.                      DELETEMSGPORT              GETREXXRESULT     
  4811.                      CREATEREXXMSG              GETREXXCOMMAND   
  4812.                      DELETEREXXMSG              GETRESULTSTRING 
  4813.                      CLEARREXXMSG               WAIT            
  4814.                      FILLREXXMSG                REXXEVENT       
  4815.                      CREATEARGSTRING            ISREXXMSG       
  4816.                      DELETEARGSTRING            REXXERROR       
  4817.                      SENDREXXCOMMAND 
  4818.  
  4819.  
  4820. Function: CreateMsgPort()
  4821. --------------------------------------------------------------------------
  4822. Syntax: PortAddress.l = CreateMsgPort("Name")
  4823. MODES: Amiga
  4824.  
  4825. Description:
  4826. CreateMsgPort is a general Function and not specific to ARexx.
  4827.  
  4828. CreateMsgPort opens an intuition PUBLIC message port of the name 
  4829. supplied as the only argument. If all is well the address of the port
  4830. created will be returned to you as a LONGWORD so the variable that you 
  4831. assign it to should be of type long.
  4832.  
  4833. If you do not supply a name then a private MsgPort will be opened for 
  4834. you.
  4835.  
  4836.     Port.l=CreateMsgPort("PortName")
  4837.  
  4838. It is important that you check you actually succeeded in opening a port
  4839. in your program. The following code or something similar will suffice.
  4840.  
  4841.     Port.l=CreateMsgPort("Name")
  4842.     IF Port=0 THEN Error_Routine{}
  4843.  
  4844. The name you give your port will be the name that Arexx looks for as the
  4845. HOST address,(and is case sensitive) so take this into consideration 
  4846. when you open your port.  NOTE IT MUST BE A UNIQUE NAME AND SHOULD NOT
  4847. INCLUDE SPACES.
  4848.  
  4849.  
  4850. Statement: DeleteMsgPort()
  4851. --------------------------------------------------------------------------
  4852. Syntax: DeleteMsgPort Port
  4853. Modes: Amiga
  4854.  
  4855. Desription:
  4856. DeleteMsgPort deletes a MessagePort previously allocated with 
  4857. CreateMsgPort(). The only argument taken by DeleteMsgPort is the address
  4858. returned by CreateMsgPort(). If the Port was a public port then it will 
  4859. be removed from the public port list.
  4860.  
  4861.     Port.l=CreateMsgPort("Name")
  4862.     IF Port=0 Then End
  4863.     DeleteMsgPort Port
  4864.  
  4865. Error checking is not critical as if this fails we have SERIOUS PROBLEMS.
  4866.  
  4867. YOU MUST WAIT FOR ALL MESSAGES FROM AREXX TO BE RECEIVED BEFORE YOU 
  4868. DELETE THE MSGPORT. IF YOU NEGLECT TO DELETE A MSGPORT BLITZ2 WILL 
  4869. DO IT FOR YOU AUTOMATICALLY ON PROGRAM EXIT.
  4870.  
  4871.  
  4872. Function: CreateRexxMsg()
  4873. --------------------------------------------------------------------------
  4874. Syntax: msg.l=CreateRexxMsg(ReplyPort,"exten","HOST")
  4875. Modes: Amiga
  4876.  
  4877. Description:
  4878. CreateRexxMsg() allocates a special Message structure used to 
  4879. communicate with Arexx.  If all is successful it returns the LONGWORD 
  4880. address of this rexxmsg structure.
  4881.  
  4882. The arguments are ReplyPort which is the long address returned by 
  4883. CreateMsgPort(). This is the Port that ARexx will reply to after it has 
  4884. finished with the message.
  4885.  
  4886. EXTEN which is the exten name used by any ARexx script you are wishing 
  4887. to run. i.e. if you are attempting to run the ARexx script test.rexx you
  4888. would use an EXTEN of "rexx".
  4889.  
  4890. HOST is the name string of the HOST port.  Your program is usually the 
  4891. HOST and so this equates to the name you gave your port in 
  4892. CreateMsgPort(). REMEMBER IT IS CASE SENSITIVE.
  4893.  
  4894. As we are allocating resources error checking is important and can be 
  4895. achieved with the following code:
  4896.  
  4897.     msg.l=CreateRexxMsg(Port,"rexx","HostName")
  4898.     IF msg=0 THEN Error_Routine{}
  4899.  
  4900.  
  4901. Statement: DeleteRexxMsg
  4902. --------------------------------------------------------------------------
  4903. Syntax: DeleteRexxMsg rexxmsg
  4904. Modes: Amiga
  4905.  
  4906. Description:
  4907. DeleteRexxMsg simply deletes a RexxMsg Structure previously allocated by 
  4908. CreateRexxMsg().  It takes a single argument which is the long address 
  4909. of a RexxMsg structure such as returned by CreateRexxMsg().
  4910.  
  4911.     msg.l=CreateRexxMsg(Port,"rexx","HostName")
  4912.     IF msg=0 THEN Error_Routine{}
  4913.     DeleteRexxMsg msg
  4914.  
  4915. Again if you neglect to delete the RexxMsg structure Blitz2 will do this
  4916. for you on exit of the program.
  4917.  
  4918.  
  4919. Statement: ClearRexxMsg
  4920. --------------------------------------------------------------------------
  4921. Syntax: ClearRexxMsg1k
  4922. Modes: Amiga
  4923.  
  4924. Description:
  4925. ClearRexxMsg is used to delete and clear an ArgString from one ormore of
  4926. the Argument slots in a RexxMsg Structure.  This is most useful for the 
  4927. more advanced programmer wishing to take advantage of the Arexx #RXFUNC 
  4928. abilities.
  4929.  
  4930. The arguments are a LONGWORD address of a RexxMsg structure. 
  4931. ClearRexxMsg will always work from slot number 1 forward to 16.
  4932.  
  4933.     Port.l=CreateMsgPort("TestPort")
  4934.     If Port = NULL Then End
  4935.     msg.l=CreateRexxMsg(Port,"vc","TestPort")
  4936.     If msg=NULL Then End
  4937.     SendRexxCommand msg,"open",#RXCOMM|#RXFF_RESULT
  4938.     wait:WHILE GetMsg_(Port) <> msg:Wend ;Wait for reply to come
  4939.     ClearRexxMsg msg                     ;Delete the Command string
  4940.                                               we sent
  4941.  
  4942. NOTE: ClearRexxMsg() is called automatically by RexxEvent() 
  4943. so the need to call this yourself is removed unless you have not sent 
  4944. the RexxMsg to Arexx.
  4945.  
  4946.  
  4947. Statement: FillRexxMsg()
  4948. --------------------------------------------------------------------------
  4949. Syntax: FillRexxMsg rexxmsg,&FillStruct
  4950. Modes: Amiga
  4951.  
  4952. Description:
  4953. FillRexxMsg allows you to fill all 16 ARGSlots if necessary with either 
  4954. ArgStrings or numerical values depending on your requirement.
  4955.  
  4956. FillRexxMsg will only be used by those programmers wishing to do more 
  4957. advanced things with Arexx, including adding libraries to the ARexx 
  4958. library list, adding Hosts,Value Tokens etc.  It is also needed to 
  4959. access Arexx using the #RXFUNC flag.
  4960.  
  4961. The arguments are a LONG Pointer to a rexxmsg.
  4962.  
  4963. The LONG address of a FillStruct NEWTYPE structure. This structure is 
  4964. defined in the Arexx.res and has the following form.
  4965.  
  4966. NEWTYPE.FillStruct
  4967.    Flags.w             ;Flag block
  4968.    Args0.l             ; argument block (ARG0-ARG15)
  4969.    Args1.l             ; argument block (ARG0-ARG15)
  4970.    Args2.l             ; argument block (ARG0-ARG15)
  4971.    Args3.l             ; argument block (ARG0-ARG15)
  4972.    Args4.l             ; argument block (ARG0-ARG15)
  4973.    Args5.l             ; argument block (ARG0-ARG15)
  4974.    Args6.l             ; argument block (ARG0-ARG15)
  4975.    Args7.l             ; argument block (ARG0-ARG15)
  4976.    Args8.l             ; argument block (ARG0-ARG15)
  4977.    Args9.l             ; argument block (ARG0-ARG15)
  4978.    Args10.l            ; argument block (ARG0-ARG15)
  4979.    Args11.l            ; argument block (ARG0-ARG15)
  4980.    Args12.l            ; argument block (ARG0-ARG15)
  4981.    Args13.l            ; argument block (ARG0-ARG15)
  4982.    Args14.l            ; argument block (ARG0-ARG15)
  4983.    Args15.l            ; argument block (ARG0-ARG15)
  4984.    EndMark.l           ;End of the FillStruct
  4985. End NEWTYPE
  4986.  
  4987. The Args?.l are the 16 slots that can possibly be filled ready for 
  4988. converting into the RexxMsg structure.  The Flags.w is a WORD value 
  4989. representing the type of LONG word you are supplying for each ARGSLOT 
  4990. (Arg?.l).
  4991.  
  4992. Each bit in the Flags WORD is representative of a single Args?.l, where
  4993. a set bit represents a numerical value to be passed and a clear bit 
  4994. represents a  string argument to be converted into a ArgString before 
  4995. installing in the RexxMsg.  The Flags Value is easiest to supply as a 
  4996. binary number to make the bits visible and would look like this.
  4997.  
  4998. %0000000000000000  ;This represents that all Arguments are Strings.
  4999.  
  5000. %0110000000000000  ;This represent the second and third as being 
  5001.                     integers.
  5002.  
  5003. FillRexxMsg expects to find the address of any strings in the Args?.l 
  5004. slots so it is important to remember when filling a FillStruct that you 
  5005. must pass the string address and not the name of the string.  This is 
  5006. acomplished using the '&' address of operand.
  5007.  
  5008. So to use FillRexxMsg we must do the following things in our program:
  5009.  
  5010. 1. Allocate a FillStruct
  5011. 2. Set the flags in the FillStruct\Flags.w
  5012. 3. Fill the FillStruct with either integer values or the
  5013.    addresses of our string arguments.
  5014. 4. Call FillRexxMsg with the LONG address of our rexxmsg and the
  5015.    LONG address of our FillStruct.
  5016.  
  5017. To accomplish this takes the following code:
  5018.  
  5019.     ;Allocate our FillStruct (called F)
  5020.  
  5021.     DEFTYPE.FillStruct F   
  5022.  
  5023.     ;assign some string arguments
  5024.  
  5025.     T$="open":T1$="0123456789"   
  5026.  
  5027.     ;Fill in our FillStruct with flags and (&) addresses of our 
  5028.          strings
  5029.  
  5030.     F\Flags= %0010000000000000,&T$,&T1$,4
  5031.  
  5032.     ;Third argument here is an integer (4).
  5033.  
  5034.     Port.l=CreateMsgPort("host")
  5035.     msg.l=CreateRexxMsg(Port,"vc","host")
  5036.  
  5037.     FillRexxMsg msg,&F
  5038.  
  5039.      ;<-3 args see #RXFUNC
  5040.  
  5041.     SendRexxCommand msg,"",#RXFUNC|#RXFF_RESULT|3
  5042.  
  5043.  
  5044.  
  5045. Function: CreateArgString()
  5046. ---------------------------------------------------------------------------
  5047. Syntax: ArgString.l=CreateArgString("this is a string")
  5048. Modes: Amiga
  5049.  
  5050. Description:
  5051. CreateArgString() builds an ARexx compatible ArgString structure around
  5052. the provided string.  All strings sent to, or received from Arexx are in
  5053. the form of ArgStrings. See the TYPE RexxARG.
  5054.  
  5055. If all is well the return will be a LONG address of the ArgString 
  5056. structure. The pointer will actually point to the NULL terminated String
  5057. with the remainder of the structure available at negative offsets.
  5058.  
  5059.     arg.l=CreateArgString("this is a string")
  5060.       IF arg=0 THEN Error_Routine{}:ENDIF
  5061.     DeleteArgString arg
  5062.  
  5063. NOTE: An ArgString maybe used as a normal BB2 string variable
  5064. by simple conversion using PEEK$ 
  5065.  
  5066. i.e. msg$=PEEK$(arg) or perhaps NPRINT PEEK$(arg)
  5067.  
  5068. NOTE: Most of the BB2 Arexx Functions call this themselves and 
  5069. there will be only limited need for you to access this function.
  5070.  
  5071.  
  5072. Statement: DeleteArgString
  5073. --------------------------------------------------------------------------
  5074. Syntax:DeleteArgString ArgString
  5075. Modes: Amiga
  5076.  
  5077. Description:
  5078. DeleteArgString is designed to Delete ArgStrings allocated by either 
  5079. Blitz2 or ARexx in a system friendly way. It takes only one argument the
  5080. LONGWORD address of an ArgString as returned by CreateArgString().
  5081.  
  5082.     arg.l=CreateArgString("this is a string")
  5083.       IF arg=0 THEN Error_Routine{}:ENDIF
  5084.     DeleteArgString arg
  5085.  
  5086. NOTE: This function is also called automatically by most of 
  5087. the BB2 Arexx Functions that need it so you should only need to call this on 
  5088. rare occations.
  5089.  
  5090.  
  5091. Statement: SendRexxCommand
  5092. --------------------------------------------------------------------------
  5093. SendRexxCommand rexxmsg,"commandstring",#RXCOMM|#RXFF_RESULT
  5094. Modes: Amiga
  5095.  
  5096. Description:
  5097. SendRexxCommand is designed to fill and send a RexxMsg structure to 
  5098. ARexx inorder to get ARexx to do something on your behalf.
  5099.  
  5100. The arguments are as follows;
  5101.  
  5102. Rexxmsg is the LONGWORD address of a RexxMsg structure as returned by 
  5103. CreateRexxMsg().
  5104.  
  5105. Commandstring is the command string you wish to send to ARexx. This is a
  5106. string as in "this is a string" and will vary depending on what you wish
  5107. to do with ARexx. Normally this will be the name of an ARexx script file
  5108. you wish to execute. ARexx will then look for the script by the name as 
  5109. well as the name with the exten added.(this is the exten you used when 
  5110. you created the RexxMsg structure using CreateRexxMsg()). This could 
  5111. also be a string file. That is a complete ARexx script in a single line.
  5112.  
  5113. ActionCodes are the flag values you use to tell ARexx what you want it 
  5114. to do with the commandstring you have supplied. The possible flags are 
  5115. as follows;
  5116.  
  5117. COMMAND (ACTION) CODES
  5118.  
  5119. The command codes that are currently implemented in the resident process
  5120. are described below. Commands are listed by their mnemonic codes,
  5121. followed by the valid modifier flags. The final code value is always the
  5122. logical OR of the code value and all of the modifier flags selected. The
  5123. command code is installed in the rm_Action field of the message packet.
  5124.  
  5125. USAGE: RXADDCON
  5126.  
  5127. This code specifies an entry to be added to the Clip List. Parameter 
  5128. slot ARGO points to the name string,slot ARG1 points to the value 
  5129. string,and slot ARG2 contains the length of the value string.
  5130.  
  5131. The name and value arguments do not need to be argstrings,but can be 
  5132. just pointers to storage areas. The name should be a null-terminated 
  5133. string,but the value can contain arbitrary data including nulls.
  5134.  
  5135. USAGE: RXADDFH
  5136.  
  5137. This action code specifies a function host to be added to the Library 
  5138. List. Parameter slot ARGO points to the (null-terminated) host name 
  5139. string,and slot ARG1 holds the search priority for the node. The search
  5140.  priority should be an integer between 100 and -100 inclusive;the 
  5141. remaining priority ranges are reserved for future extensions. If a node
  5142. already exists with the same name,the packet is returned with a warning
  5143. level error code.
  5144.  
  5145. Note that no test is made at this time as to whether the host port 
  5146. exists.
  5147.  
  5148. USAGE:RXADDLIB
  5149.  
  5150. This code specifies an entry to be added to the Library List. Parameter
  5151. slot ARGO points to a null-terminated name string referring either to a
  5152. function library or a function host. Slot ARG1 is the priority for the 
  5153. node and should be an integer between 100 and -100 inclusive;the 
  5154. remaining priority ranges are reserved for future extensions. Slot ARG2
  5155. contains the entry Point offset and slot ARG3 is the library version 
  5156. number. If a node already exists with the same name,the packet is 
  5157. returned with a warning level error code. Otherwise,a new entry is added
  5158. and the library or host becomes available to ARexx programs. Note that 
  5159. no test is made at this time as to whether the library exists and can be
  5160. opened.
  5161.  
  5162. USAGE:RXCOMM [RXFF_TOKEN] [RXFF_STRING] [RXFF_RESULT] [RXFF_NOIO]
  5163.  
  5164. Specifies a command-mode invocation of an ARexx program. Parameter slot
  5165. ARGO must contain an argstring Pointer to the command string. The 
  5166. RXFB_TOKEN flag specifies that the command line is to be tokenized 
  5167. before being passed to the invoked program. The RXFB_STRING flag bit 
  5168. indicates that the command string is a "string file." Command 
  5169. invocations do not normally return result strings,but the RXFB_RESULT
  5170. flag can be set if the caller is prepared to handle the cleanup 
  5171. associated with a returned string. The RXFB_NOIO modifier suppresses the
  5172. inheritance of the host's input and output streams.
  5173.  
  5174. USAGE:RXFUNC [RXFF_RESULT] [RXFF_STRING] [RXFF_NOIO] argcount
  5175.  
  5176. This command code specifies a function invoction. Parameter slot ARGO
  5177. contains a pointer to the function name string,and slots ARG1 through 
  5178. ARG15 point to the argument strings,all of which must be passed as 
  5179. argstrings. The lower byte of the command code is the argument count;
  5180. this count excludes the function name string itself. Function calls 
  5181. normally set the RXFB_RESULT flag,but this is not mandatory. The 
  5182. RXFB_STRING modifier indicates that the function name string is actually
  5183. a "string file". The RXFB_NOIO modifier suppresses the inheritance of 
  5184. the host's input and output streams.
  5185.  
  5186. USAGE:RXREMCON
  5187.  
  5188. This code requests that an entry be removed from the Clip List. 
  5189. Parameter slot ARGO points to the null-terminated name to be removed. 
  5190. The Clip List is searched for a node matching the supplied name,and if a
  5191. match is found the list node is removed and recycled. If no match is 
  5192. found the packet is returned with a warning error code.
  5193.  
  5194. USAGE:RXREMLIB
  5195.  
  5196. This command removes a Library List entry. Parameter slot ARGO points to
  5197. the null terminated string specifying the library to be removed. The 
  5198. Library List is searched for a node matching the library name,and if a
  5199. match is found the node is removed and released. If no match is found 
  5200. the packet is returned with a warning error code. The libary node will 
  5201. not be removed if the library is currently being used by an ARexx 
  5202. program.
  5203.  
  5204. USAGE:RXTCCLS
  5205.  
  5206. This code requests that the global tracing console be closed. The 
  5207. console window will be closed immediately unless one or more ARexx 
  5208. programs are waiting for input from the console. In this event,the 
  5209. window will be closed as soon as the active programs are no longer 
  5210. using it.
  5211.  
  5212. USAGE:RXTCOPN
  5213.  
  5214. This command requests that the global tracing console be opened. Once
  5215. the console is open,all active ARexx programs will divert their tracing
  5216. output to the console. Tracing input(for interactive debugging)will also
  5217. be diverted to the new console. Only one console can be opened;
  5218. subsequent RXTCOPN requests will be returned with a warning error 
  5219. message.
  5220.  
  5221. MODIFIER FLAGS
  5222.  
  5223. Command codes may include modifier flags to select various processing 
  5224. options. Modifier flags are specific to certain commands,and are 
  5225. ignored otherwise.
  5226.  
  5227. RXFF_NOIO.
  5228.  
  5229. This modifier is used with the RXCOMM and RXFUNC command codes to 
  5230. suppress the automatic inheritance of the host's input and output 
  5231. streams.
  5232.  
  5233. RXFF_NONRET.
  5234.  
  5235. Specifies that the message packet is to be recycled by the resident 
  5236. process rather than being returned to the sender. This implies tht 
  5237. the sender doesn't care about whether the requested action succeeded,
  5238. since the returned packet provides the only means of acknowledgement. 
  5239.  
  5240. (RXFF_NONRET MUST NOT BE USED AT ANY TIME)
  5241.  
  5242. RXFF_RESULT.
  5243.  
  5244. This modifer is valid with the RXCOMM and RXFUNC commands,and requests 
  5245. that the called program return a result string. If the program EXITs(or
  5246. RETURNs)with an expression,the expression result is returned to the 
  5247. caller as an argstring. This ArgString then becomes the callers 
  5248. responsibility to release. This is automatically accomplished by using
  5249. GetResultString(). It is therefore imperitive that if you use 
  5250. RXFF_RESULT then you must use GetResultString() when the message packet
  5251. is returned to you or you will incure a memory loss equal to the size of
  5252. the ArgString Structure.
  5253.  
  5254. RXFF_STRING.
  5255.  
  5256. This modifer is valid with the RXCOMM and RXFUNC command codes. It 
  5257. indicates that the command or function argument(in slot ARGO)is a 
  5258. "string file" rather than a file name.
  5259.  
  5260. RXFF_TOKEN.
  5261.  
  5262. This flag is used with the RXCOMM code to request that the command 
  5263. string be completely tokenized before being passed to the invoked 
  5264. program. Programs invoked as commands normally have only a single 
  5265. argument string. The tokenization process uses "white space" to 
  5266. separate the tokens,except within quoted strings. Quoted strings can use
  5267. either single or double quotes,and the end of the command string(a null 
  5268. character) is considered as an implicit closing quote.
  5269.  
  5270. EXAMPLES:
  5271.  
  5272.     Port.l=OpenRexxPort("TestPort")
  5273.         If Port = NULL End:EndIf
  5274.     msg.l=CreateRexxMsg(Port,"vc","TestPort")
  5275.         If msg=NULL End:EndIf
  5276.     SendRexxCommand msg,"open",#RXCOMM|#RXFF_RESULT
  5277.  
  5278.  
  5279. Statement: ReplyRexxMsg
  5280. --------------------------------------------------------------------------
  5281. Syntax: ReplyRexxMsg rexxmsg,Result1,Result2,"ResultString"
  5282. Modes: Amiga
  5283.  
  5284. Description:
  5285. When ARexx sends you a RexxMsg (Other than a reply to yours i.e. 
  5286. sending yours back to you with results) you must repl to the message
  5287. before ARexx will continue or free that memory associated with that 
  5288. RexxMsg.  ReplyRexxMsg accomplishes this for you. ReplyRexxMsg also will
  5289. only reply to message that requires a reply so you do not have to 
  5290. include message checking routines in your source simply call 
  5291. ReplyRexxMsg on every message you receive wether it is a command or not.
  5292.  
  5293. The arguments are;
  5294.  
  5295. rexxmsg is the LONGWORD address of the RexxMsg Arexx sent you as 
  5296. returned by GetMsg_(Port).
  5297.  
  5298. Result1 is 0 or a severity value if there was an error.
  5299.  
  5300. Result2 is 0 or an Arexx error number if there was an error processing 
  5301. the command that was contained in the message.
  5302.  
  5303. ResultString is the result string to be sent back to Arexx. This will 
  5304. only be sent if Arexx requested one and Result1 and 2 are 0.
  5305.  
  5306. ReplyRexxMsg rexxmsg,0,0,"THE RETURNED MESSAGE"
  5307.  
  5308.  
  5309. Function: GetRexxResult()
  5310. --------------------------------------------------------------------------
  5311. Syntax: Result.l=GetRexxResult(rexxmsg,ResultNum)
  5312. Modes: Amiga
  5313.  
  5314. Description:
  5315. GetRexxResult extracts either of the two result numbers from the RexxMsg
  5316. structure.  Care must be taken with this Function to ascertain wether 
  5317. you are dealing with error codes or a ResultString address.  Basically 
  5318. if result 1 is zero then result 2 will either be zero or contain a 
  5319. ArgString pointer to the ResultString. This should then be obtained 
  5320. using GetResultString().
  5321.  
  5322. The arguments to GetRexxResult are;
  5323.  
  5324. rexxmsg is the LONGWORD address of a RexxMsg structure returned from 
  5325. ARexx.
  5326.  
  5327. ResultNum is either 1 or 2 depending on wether you wish to check result 
  5328. 1 or result 2.
  5329.  
  5330.     ;print the severity code if there was an error
  5331.  
  5332.     NPrint GetRexxResult(msg,1)
  5333.  
  5334.     ;check for ResultString and get it if there is one
  5335.  
  5336.     IF GetRexxResult(msg,1)=0
  5337.     IF GetRexxResult(msg,2) THEN GetResultString(msg)    
  5338.     ENDIF
  5339.  
  5340.  
  5341. Function: GetRexxCommand()
  5342. --------------------------------------------------------------------------
  5343. Syntax: String$=GetRexxCommand(msg,1)
  5344. Modes: Amiga
  5345.  
  5346. Description:
  5347. GetRexxCommand allows you access to all 16 ArgString slots in the given 
  5348. RexxMsg. Slot 1 contains the command string sent by ARexx in a command
  5349. message so this allows you to extract the Command.
  5350.  
  5351. Arguments are:
  5352.  
  5353. rexxmsg is a LONGWORD address of the RexxMsg structure as returned by 
  5354.  RexxEvent()
  5355.  
  5356. ARGNum is an integer from 1 to 16 specifying the ArgString Slot you wish
  5357. to get an ArgString from.
  5358.  
  5359. BEWARE YOU MUST KNOW THAT THERE IS AN ARGSTRING THERE.
  5360.  
  5361.  
  5362. Function: GetResultString()
  5363. --------------------------------------------------------------------------
  5364. Syntax: String$=GetResultString(rexxmsg)
  5365. Modes: Amiga
  5366.  
  5367. Description:
  5368. GetResultString allows you to extract the result string returned to you
  5369. by ARexx after it has completed the action you requested. ARexx will 
  5370. only send back a result string if you asked for one (using the 
  5371. ActionCodes) and the requested action was successful.
  5372.  
  5373.     ;check for ResultString and get it if there is one
  5374.  
  5375.     IF GetRexxResult(msg,1)=0
  5376.       IF GetRexxResult(msg,2) THEN GetResultString(msg)
  5377.     ENDIF
  5378.  
  5379. NOTE: Do not attempt to DeleteArgString the result
  5380. string returned by this function as the return is a string and not an 
  5381. ArgString pointer. BB2 will automatically delete this argstring for you.
  5382.  
  5383.  
  5384. Statement: Wait
  5385. --------------------------------------------------------------------------
  5386. Syntax: Wait
  5387. Modes: Amiga
  5388.  
  5389. Description:
  5390. Wait halts all program execution until an event occurs that the program
  5391. is interested in.  Any intuition event such as clicking on a gadget in 
  5392. a window will start program execution again.
  5393.  
  5394. A message arriving at a MsgPort will also start program execution again.
  5395. So you may use Wait to wait for input from any source including messages
  5396. from ARexx to your program.
  5397.  
  5398. Wait should always be paired with EVENT if you need to consider 
  5399. intuition events in your event handler loop.
  5400.  
  5401.     Repeat
  5402.           Wait:rmsg.l=REXXEVENT(Port):ev.l=EVENT
  5403.           IF IsRexxMsg(Rmsg) Process_Rexx_Messages{}:ENDIF
  5404.           ;
  5405.           ;
  5406.           ;Rest of normal intuition event loop statements case etc
  5407.           ;
  5408.     Until ev =$200
  5409.  
  5410.  
  5411. Function: RexxEvent()
  5412. --------------------------------------------------------------------------
  5413. Syntax: Rmsg.l=RexxEvent(Port)
  5414. Modes: Amiga
  5415.  
  5416. Description:
  5417. RexxEvent is our Arexx Equivalent of EVENT().  It's purpose is to check
  5418. the given Port to see if there is a message waiting there for us.
  5419.  
  5420. It should be called after a WAIT and will either return a NULL to us if
  5421. there was no message or the LONG address of a RexxMsg Structure if 
  5422. there was a message waiting.
  5423.  
  5424. Multiple Arexx MsgPorts can be handled using separate calls to 
  5425. RexxEvent():
  5426.  
  5427. Wait:Rmsg1.l=RexxEvent(Port1):Rmsg2.l=RexxEvent(Port2):etc
  5428.  
  5429. RexxEvent also takes care of automatically clearing the rexxmsg if it is
  5430. our message being returned to us.
  5431.  
  5432. The argument is the LONG address of a MsgPort as returned by 
  5433. CreateMsgPort().
  5434.  
  5435. EXAMPLES:
  5436.  
  5437.     Repeat
  5438.           Wait:Rmsg.l=REXXEVENT(Port):ev.l=EVENT
  5439.           IF IsRexxMsg(Rmsg) Process_Rexx_Messages{}:ENDIF
  5440.           ;
  5441.           ;
  5442.           ;Rest of normal intuition event loop statements case etc
  5443.     Until ev =$200
  5444.  
  5445. SEE ALSO:  WAIT() , CREATEMSGPORT() 
  5446.  
  5447.  
  5448. Function: IsRexxMsg()
  5449. --------------------------------------------------------------------------
  5450. Syntax: IsRexxMsg(rexxmsg)
  5451. Modes: Amiga
  5452.  
  5453. Description:
  5454. IsRexxMsg tests the argument (a LONGWORD pointer hopefully to a message
  5455. packet) to see if it is a RexxMsg Packet. If it is TRUE is returned (1)
  5456. or FALSE if it is not (0).
  5457.  
  5458.     Repeat
  5459.           Wait:Rmsg.l=REXXEVENT:ev.l=EVENT
  5460.           IF IsRexxMsg(Rmsg) Process_Rexx_Messages{}:ENDIF
  5461.           ;
  5462.           ;
  5463.         ;Rest of normal intuition event loop statements case etc
  5464.     Until ev =$200
  5465.  
  5466. As the test is non destructive and extensive passing a NULL value or a 
  5467. LONGWORD that does not point to a Message structure (Intuition or Arexx)
  5468. will safely return as FALSE.
  5469.  
  5470. SEE ALSO:   CREATEREXXMSG() , GETMSG_() 
  5471.  
  5472.  
  5473. Function: RexxError()
  5474. --------------------------------------------------------------------------
  5475. Syntax: ErrorString$=RexxError(ErrorCode)
  5476. Modes: Amiga
  5477.  
  5478. Description:
  5479. RexxError converts a numerical error code such as you would get from 
  5480. GetRexxResult(msg,2) into an understandable string error message.  If 
  5481. the ErrorCode is not known to ARexx a string stating so is returned  
  5482. this ensures that this function will always succeed.
  5483.  
  5484.     NPRINT RexxError(5)
  5485.  
  5486. SEE ALSO:  GETREXXRESULT() 
  5487.  
  5488.  
  5489.  
  5490.                              AGA PALETTE HANDLING
  5491.  
  5492. Blitz 2's palette object has (again) changed. Palette objects are now 
  5493. capable of containing AGA compatible 24 bit colours. 
  5494.  
  5495.                                  AGA Commands:
  5496.  
  5497.                              AGARGB           AGAGREEN 
  5498.                              AGAPALRGB        AGABLUE  
  5499.                              AGARED          
  5500.  
  5501.                              NEW SCREENFLAGS     
  5502.                              3.0 BITMAP HANDLING 
  5503.                              NEW GADGET HANDLING 
  5504.  
  5505. The new palette objects look like this:
  5506.  
  5507. NEWTYPE.rgbcomp
  5508.   _red.l   ;left justified red component.
  5509.   _green.l ;left justified green component.
  5510.   _blue.l  ;left justified blue component.
  5511. End NEWTYPE
  5512.  
  5513. NEWTYPE.palettedata
  5514.   _numcols.w          ; same as palette/_numcols.
  5515.   _zero.w             ; for compatibility with graphics lib         
  5516.                       ; LoadRGB32.
  5517.   _rgbs.rgbcomp[256]  ;256 is the max the amount will actually
  5518.                       ;depend upon the highest palette entry.
  5519.   _zero2.l            ;for graphics lib too.
  5520. End NEWTYPE
  5521.  
  5522. This is the actual object return by Addr Palette(n):
  5523.  
  5524. NEWTYPE.palette
  5525.   _*data.palettedata ; 00: NULL if no palette present
  5526.                      ;     else a pointer to  palettedata.
  5527.   _numcols.w         ; 04: num cols present in palettedata.
  5528.                      ;     below is colour cycling info.
  5529.   _lowcol.w          ; 06: low colour for cycle range.
  5530.   _hicol.w           ; 08: high colour for cycle range.
  5531.   _speed.w           ; 10: speed of cycle : 16384 = max speed
  5532.                      ;     sign indicates cycling direction.
  5533.   _var.w             ; 12: cvariable speed is added to.
  5534.                      ;
  5535.                      ; more possible cycling entries....
  5536.                      ;
  5537.                      ; 128: sizeof.
  5538. End NEWTYPE
  5539.  
  5540. Now for the new AGA functions added to Blitz 2...these will all generate
  5541. a runtime error if used on a non-AGA Amiga....
  5542.  
  5543.  
  5544. Statement: AGARGB
  5545. --------------------------------------------------------------------------
  5546. Syntax: AGARGB Colour Register,Red,Green,Blue
  5547. Modes: Amiga
  5548.  
  5549. Description:
  5550. The AGARGB command is the AGA equivalent of the RGB command. The 'Red',
  5551. 'Green' and 'Blue' parameters must be in the range 0 through 255, while
  5552. 'Colour Register' is limited to the number of colours available on the 
  5553. currently used screen.
  5554.  
  5555. Example:
  5556.  
  5557.     ;
  5558.     ; AGA test
  5559.     ;
  5560.  
  5561.     Screen 0,0,0,1280,512,8,$8024,"SUPER HIRES 256 COLORS",1,2
  5562.  
  5563.     ScreensBitMap 0,0
  5564.  
  5565.     For i=0 To 255
  5566.         AGARGB i,i/2,i/3,i       ;shades of purple
  5567.           Circle 640,256,i*2,i,i   ;big SMOOTH circles
  5568.     Next
  5569.  
  5570.     MouseWait
  5571.     
  5572.  
  5573. Statement: AGAPalRGB
  5574. --------------------------------------------------------------------------
  5575. Syntax: AGAPalRGB Palette#,Colour Register,Red,Green,Blue
  5576. Modes: Amiga
  5577.  
  5578. Description:
  5579. The AGAPalRGB command is the AGA equivalent of the PalRGB command. 
  5580. AGAPalRGB allows you to set an individual colour register within a 
  5581. palette object. This command only sets up an entry in a palette object,
  5582. and will not alter the actual screen palette until a 'Use Palette' is 
  5583. executed.
  5584.  
  5585.  
  5586. Function: AGARed
  5587. --------------------------------------------------------------------------
  5588. Syntax: AGARed(colour register)
  5589. Modes: Amiga
  5590.  
  5591. Description:
  5592. The AGARed function returns the red component of the specified colour 
  5593. register within the currently used screen. The returned value will be 
  5594. within the range 0 (being no red) through 255 (being full red).
  5595.  
  5596.  
  5597. Function: AGAGreen
  5598. --------------------------------------------------------------------------
  5599. Syntax: AGAGreen(colour register)
  5600. Modes: Amiga
  5601.  
  5602. Description:
  5603. The AGAGreen function returns the green component of the specified 
  5604. colour register within the currently used screen. The returned value 
  5605. will be within the range 0 (being no green) through 255 (being full 
  5606. green).
  5607.  
  5608.  
  5609. Function: AGABlue
  5610. --------------------------------------------------------------------------
  5611. Syntax: AGABlue(colour register)
  5612. Modes: Amiga
  5613.  
  5614. Description:
  5615. The AGABlue function returns the blue component of the specified colour
  5616. register within the currently used screen. The returned value will be 
  5617. within the range 0 (being no blue) through 255 (being full blue).
  5618.  
  5619.  
  5620.                                 NEW SCREEN FLAGS
  5621.  
  5622. The superhires viewmode flag $20 is now acceptable, but should always be
  5623. used in conjunction with the standard hires flag of $8000. 
  5624.  
  5625. The depth of a screen may now be specified up to 8 bitplanes (256 
  5626. colours) deep (if you've got an AGA machine!). Here's how you would go
  5627. about opening a super-hires, 256 colour screen:
  5628.  
  5629. Screen 0,0,0,1280,256,8,$8020,"MyScreen",1,0
  5630.  
  5631.  
  5632. 3.0 BITMAP HANDLING
  5633.  
  5634. Blitz 2's Bitmap object has been upgraded to allow for interleaved 
  5635. bitmaps:
  5636.  
  5637. NewType.Bitmap
  5638. _   ebwidth[0]     ;00: for compatability.
  5639. _   linemod.w      ;00: value to get from one scanline to next.
  5640. _   height.w       ;02: currently pixel height - but open to commodore
  5641.                    ;    'enhancement'.
  5642. _   depth.w        ;04: number of bitplanes.
  5643. _   pad.b[2]       ;06: nothing.
  5644. _   data.l[8]      ;08: actual bitplane pointers.
  5645. _   pad2.b[12]     ;40: zilch.
  5646. _   flags.w        ;0=normal bitmap, <0=interleaved.
  5647. _   bitplanemod.w  ;value to get from one bitplane to next. MAY BE 0!
  5648. _   xclip.w        ;pixel width for render clipping
  5649. _   yclip.w        ;pixel height for render clipping
  5650. _   cclip.w        ;number of colours available on bitmap ( = 2^_depth)
  5651. _   isreal.w       ;0=no bitmap here, <0=blitz created bitmap, 
  5652.                     >0=borrowed
  5653.                ;64: sizeof
  5654. End NEWTYPE
  5655.  
  5656. Also, many Blitz2 bitmap related commands have been altered to take this
  5657. new object into account.
  5658.  
  5659.  
  5660. NEW GADGET HANDLING
  5661.  
  5662. A new bit, bit 9, in the 'Flags' parameter of the 'TextGadget' and 
  5663. 'ShapeGadget' commands allow you to create mutually exclusive radio 
  5664. button type gadgets. These gadgets DO NOT require Kickstart 2.0 to 
  5665. operate!
  5666.  
  5667. Here is an example of setting up some radio button style text gadgets:
  5668.  
  5669. TextGadget 0,16,16,512,1,"OPTION 1":Toggle 0,1,On
  5670. TextGadget 0,16,32,512,2,"OPTION 2"
  5671. TextGadget 0,16,48,512,3,"OPTION 3"
  5672.  
  5673. The new 'ButtonGroup' command allows you to specify which 'group' a 
  5674. series of button gadgets belong to. See 'ButtonGadget' below.
  5675.  
  5676. Note that if you are using button gadgets, you SHOULD really toggle ONE
  5677. of the gadgets 'On' before giving the gadgetlist to a window - as in the
  5678. example above.
  5679.  
  5680. Text Gadgets may now be used to create 'cycling' gadgets. Again, these 
  5681. gadgets DO NOT require kickstart 2.0 to work.
  5682.   
  5683. If you create a text gadget which contains the '|' character in the 
  5684. gadget's text, Blitz 2 will recognize this as a 'cycling' gadget, using 
  5685. the '|' character to separate the options - like this:
  5686.  
  5687.     TextGadget 0,16,16,0,1," HELLO |GOODBYE| SEEYA |"
  5688.  
  5689. Now, each time this gadget is clicked on, the gadgets text will cycle
  5690. through 'Hello', 'GOODBYE' and 'SEEYA'. Note that each option is spaced 
  5691. out to be of equal length. This feature should not be used with a 
  5692. GadgetJam mode of 0.
  5693.  
  5694.  NEW GADGETS EXAMPLE 
  5695.  
  5696. NEW GADGET COMMANDS:
  5697.  
  5698.                              GAGETSTATUS     
  5699.                              BUTTONGROUP     
  5700.                              BUTTONID        
  5701.                              ENABLE          
  5702.                              DISABLE         
  5703.                              SETGADGETSTATUS 
  5704.  
  5705.  
  5706. Function: GadgetStatus
  5707. --------------------------------------------------------------------------
  5708. Syntax: GadgetStatus(GadgetList#,Id)
  5709. Modes: Amiga
  5710.  
  5711. Description:
  5712. GadgetStatus may be used to determine the status of the specified 
  5713. gadget. In the case of 'toggle' type gadget, GadgetStatus will return 
  5714. true (-1) if the gadget is currently on, or false (0) if the gadget is 
  5715. currently off.
  5716.  
  5717. In the case of a cycling text gadget, GadgetStatus will return a value 
  5718. of 1 or greater representing the currently displayed text within the 
  5719. gadget.
  5720.  
  5721.  
  5722. Statement: ButtonGroup
  5723. --------------------------------------------------------------------------
  5724. Syntax: ButtonGroup Group
  5725. Modes: Amiga
  5726.  
  5727. Description:
  5728. ButtonGroup allows you to determine which 'group' a number of button 
  5729. type gadgets belong to. Following the execution of ButtonGroup, any 
  5730. button gadgets created will be identified as belonging to the specified
  5731. group. The upshot of all this is that button gadgets are only mutually 
  5732. exclusive to other button gadgets within the same group.
  5733.  
  5734. 'Group' must be a positive number greater than 0. Any button gadgets 
  5735. created before a 'ButtonGroup' command is executed will belong to group
  5736. 1.
  5737.  
  5738.  
  5739. Function: ButtonId
  5740. --------------------------------------------------------------------------
  5741. Syntax: ButtonId(GadgetList#,ButtonGroup)
  5742. Modes: Amiga
  5743.  
  5744. Description:
  5745. ButtonId may be used to determine which gadget within a group of button
  5746. type gadgets is currently selected. The value returned will be the 
  5747. GadgetId of the button gadget currently selected.
  5748.  
  5749.  
  5750. Statements: Enable & Disable
  5751. --------------------------------------------------------------------------
  5752. Syntax: Enable GadgetList#,Id  & Disable GadgetList#,Id
  5753. Modes: Amiga
  5754.  
  5755. Description:
  5756. A gadget when disabled is covered by a "mesh" and can not be accessed 
  5757. by the user. The commands Enable and Disable allow the programmer to 
  5758. access this feature of Intuition.
  5759.  
  5760.  
  5761. Statement: SetGadgetStatus
  5762. --------------------------------------------------------------------------
  5763. Syntax: SetGadgetStatus GadgetList#,Id,Value  
  5764. Modes: Amiga
  5765.  
  5766. Description:
  5767. SetGadgetStatus is used to set a cycling text gadget to a particular 
  5768. value, once set ReDraw should be used to refresh the gadget to reflect 
  5769. it's new value.
  5770.  
  5771.  
  5772. NEW GADGETS EXAMPLE:
  5773.  
  5774.     ;
  5775.     ; new gadget types
  5776.     ;
  5777.     WBStartup:FindScreen 0     ;open on workbench
  5778.     TextGadget 0,32,14,0,0,"CYCLE 1|CYCLE 2|CYCLE 3" 
  5779.  
  5780.     ButtonGroup 1  ;first group of radio buttons follows
  5781.     For i=1 To 5
  5782.         TextGadget 0,32,14+i*14,512,i,"CHANNEL #"+Str$(i)
  5783.     Next
  5784.  
  5785.     ButtonGroup 2  ;second group of radio buttons follows
  5786.     For i=6 To 10
  5787.         TextGadget 0,32,14+i*14,512,i,"BAND #"+Str$(i)
  5788.     Next
  5789.     Window 0,20,20,160,180,$1008,"GADGET TEST",1,2,0  
  5790.     
  5791.     Repeat               ;wait until close window gadget hit
  5792.         ev.l=WaitEvent
  5793.     Until ev=$200
  5794.  
  5795.  
  5796.                               Available commands:
  5797.  
  5798.                                     SYSTEMDATE 
  5799.                                     DATE$      
  5800.                                     NUMDAYS    
  5801.                                     DATEFORMAT 
  5802.                                     DAYS       
  5803.                                     MONTHS     
  5804.                                     YEARS      
  5805.                                     WEEKDAY    
  5806.                                     HOURS      
  5807.                                     MINS       
  5808.                                     SECS       
  5809.  
  5810.  
  5811.  
  5812. Function: SystemDate
  5813. --------------------------------------------------------------------------
  5814. Syntax: SystemDate  
  5815. Modes: Amiga
  5816.  
  5817. Description:
  5818. SystemDate returns the system date as the number of days passed since 
  5819. 1/1/1978.
  5820.  
  5821. Example:
  5822.  
  5823. ;
  5824. ; date/time test
  5825. ;
  5826.  
  5827. Dim d$(6):Restore daynames:For i=0 To 6:Read d$(i):Next
  5828. Dim m$(12):Restore monthnames:For i=1 To 12:Read m$(i):Next
  5829.  
  5830. NPrint Date$(SystemDate)
  5831. NPrint d$(WeekDay)," ",Days," ",m$(Months)," ",Years
  5832. NPrint Hours,":",Mins,":",Secs
  5833. NPrint "press mouse to quit"
  5834. MouseWait
  5835.  
  5836. daynames:
  5837.     Data$ SUNDAY,MONDAY,TUESDAY,WEDNESDAY
  5838.     Data$ THURSDAY,FRIDAY,SATURDAY
  5839. monthnames:
  5840.     Data$ JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
  5841.  
  5842.  
  5843. Function: Date$
  5844. --------------------------------------------------------------------------
  5845. Syntax: Date$ (days)
  5846. Modes: Amiga
  5847.  
  5848. Description:
  5849. Date$ converts the format returned by SystemDate (days passed since 
  5850. 1/1/1978) into a string format of dd/mm/yyyy or mm/dd/yyyy depending on
  5851. the dateformat (defaults to 0).
  5852.  
  5853.  
  5854. Function: NumDays
  5855. --------------------------------------------------------------------------
  5856. Syntax: NumDays (date$)
  5857. Modes: Amiga
  5858.  
  5859. Description:
  5860. Numdays converts a Date$ in the above format to the day count format, 
  5861. where numdays is the number of days since 1/1/1978.
  5862.  
  5863.  
  5864. Statement: DateFormat
  5865. --------------------------------------------------------------------------
  5866. Syntax: DateFormat format# ; 0 or 1
  5867. Modes: Amiga
  5868.  
  5869. Description:
  5870. DateFormat configures the way both date$ and numdays treat a string 
  5871. representation of the date: 0=dd/mm/yyyy and 1=mm/dd/yyyy
  5872.  
  5873.  
  5874. Functions: Days Months Years & WeekDay
  5875. --------------------------------------------------------------------------
  5876. Syntax: Days Months Years & WeekDay  
  5877. Modes: Amiga
  5878.  
  5879. Description:
  5880. Days Months and Years each return the particular value relevant to the 
  5881. last call to SystemDate. They are most useful for when the program needs
  5882. to format the output of the date other than that produced by date$. 
  5883. WeekDay returns which day of the week it is with Sunday=0 through to 
  5884. Saturday=6.
  5885.  
  5886.  
  5887. Functions: Hours  Mins & Secs
  5888. --------------------------------------------------------------------------
  5889. Syntax: Hours Mins & Secs
  5890. Modes: Amiga
  5891.  
  5892. Description:
  5893. Hours, Mins and Secs return the time of day when SystemDate was last 
  5894. called.
  5895.  
  5896.  
  5897.                            New Environment commands:
  5898.  
  5899.                                    WBWIDTH     
  5900.                                    WBHEIGHT    
  5901.                                    WBDEPTH     
  5902.                                    WBVIEWMODE  
  5903.                                    PROCESSOR   
  5904.                                    EXECVERSION 
  5905.  
  5906.                                 Added in BUM #4
  5907.  
  5908.  
  5909. Functions: WBWidth Height Depth & ViewMode
  5910. --------------------------------------------------------------------------
  5911. Syntax: WBWidth, WBHeight, WBDepth & WBViewMode
  5912. Modes: Amiga
  5913.  
  5914. Description:
  5915. The functions WBWidth, WBHeight, WBDepth & WBViewMode return the width, 
  5916. height,depth & viewmode of the current WorkBench screen as configured 
  5917. by preferences.
  5918.  
  5919.  
  5920. Functions: Processor & ExecVersion
  5921. --------------------------------------------------------------------------
  5922. Syntax: Processor & ExecVersion
  5923. Modes: Amiga
  5924.  
  5925. Description:
  5926. The two functions Processor & ExecVersion return the relevant 
  5927. information about the system the program is running on. The values 
  5928. returned are as follows:
  5929.  
  5930.     ExecVersion   OS Release    Processor   Part#
  5931.         ------------+------------   -----------+---------------    
  5932.         33          |  1.2          0          | 68000
  5933.         34?         |  1.3          1          | 68010
  5934.         36          |  2.0          2          | 68020        
  5935.         39          |  3.0          3          | 68030
  5936.                 |               4          | 68040
  5937.  
  5938.  
  5939.                     New drawing commands included in BUM #4:
  5940.  
  5941.                                  POLY            
  5942.                                  POLYF           
  5943.                                  BITPLANESBITMAP 
  5944.                                  CLIPBLIT        
  5945.  
  5946.  
  5947. Statement: Poly & Polyf
  5948. --------------------------------------------------------------------------
  5949. Syntax: Poly  numpoints,*coords.w,color
  5950.         Polyf numpoints,*coords.w,color[,color2]
  5951. Modes: Amiga/Blitz
  5952.  
  5953. Description:
  5954. Poly & Polyf are bitmap based commands such as Box and Line. They draw
  5955. polygons (unfilled and filled respectively) using coordinates from an 
  5956. array or newtype of words. Polyf has an optional parameter color2, if 
  5957. used this colour will be used if the coordinates are listed in anti-
  5958. clockwise order, useful for 3D type applications. If color2= -1 then the
  5959. polygon is not drawn if the verticies are listed in anti-clockwise 
  5960. order.
  5961.  
  5962. Example:
  5963.  
  5964.     NEWTYPE .tri:x0.w:y0:x1:y1:x2:y2:End NEWTYPE
  5965.     BLITZ
  5966.     BitMap 0,320,256,3
  5967.     Slice 0,44,3:Show 0
  5968.     While Joyb(0)=0
  5969.           a.tri\x0=Rnd(320),Rnd(256),Rnd(320),Rnd(256),Rnd(320),Rnd(256)
  5970.       Polyf 3,a,1+Rnd(7)
  5971.     Wend
  5972.  
  5973.  
  5974. Statement: BitPlanesBitMap
  5975. --------------------------------------------------------------------------
  5976. Syntax: BitPlanesBitMap SrcBitMap, DestBitMap, PlanePick
  5977. Modes: Amiga/Blitz
  5978.  
  5979. Description:
  5980. BitPlanesBitMap creates a `dummy' bitmap from the SrcBitMap with only 
  5981. the bitplanes specified by the PlanePick mask. This is useful for shadow
  5982. effects etc. where blitting speed can be speed up because of the fewer 
  5983. bitplanes involved
  5984.  
  5985.  
  5986. Statement: ClipBlit
  5987. --------------------------------------------------------------------------
  5988. Syntax: ClipBlit Shape#,X,Y
  5989. Modes: Amiga/Blitz
  5990.  
  5991. Description:
  5992. ClipBlit is the same as the Blit command except ClipBlit will clip the 
  5993. shape to the inside of the used bitmap, all blit commands in Blitz2 are
  5994. due to be expanded with this feature. 
  5995.  
  5996.  
  5997.                             Window Library Additions
  5998.  
  5999.                                  The Commands:
  6000.  
  6001.                                WINDOW              
  6002.                                POSITIONSUPERBITMAP 
  6003.                                GETSUPERBITMAP      
  6004.                                PUTSUPERBITMAP      
  6005.                                WTITLE              
  6006.                                CLOSEWINDOW         
  6007.                                WPRINTSCROLL        
  6008.                                WBLIT               
  6009.                                BITMAPTOWINDOW      
  6010.                                EVENTCODE           
  6011.                                EVENTQUALIFIER      
  6012.  
  6013.  
  6014. Statement: Window
  6015. --------------------------------------------------------------------------
  6016. Syntax: Window Window#,x,y,width,height,flags,title$,dpen,bpen[,gadgetlist#
  6017.         [,bitmap#]]
  6018.  
  6019. The Window library has been extended to handle super bitmap windows. 
  6020. Super-BitMap windows allow the window to have it's own bitmap which can
  6021. actually be larger than the window. The two main benefits of this 
  6022. feature are the window's ability to refresh itself and the ability to 
  6023. scroll around a large area "inside" the bitmap.
  6024.  
  6025. To attach a BitMap to a Window set the SuperBitMap flag in the flags 
  6026. field and include the BitMap# to be attached.
  6027.  
  6028.  
  6029. Statement: PositionSuperBitMap
  6030. --------------------------------------------------------------------------
  6031. Syntax: PositionSuperBitMap x,y
  6032.  
  6033. PositionSuperBitMap is used to display a certain area of the bitmap in a
  6034. super bitmap window.
  6035.  
  6036. Example:
  6037.  
  6038.      ; 
  6039.      ; super bitmap example 
  6040.      ; 
  6041.  
  6042.      ;create large bimtap for our superbitmap window
  6043.  
  6044.      width=320:height=200 
  6045.      BitMap 0,width,height,2
  6046.      Circlef 160,100,160,100,1 : Box 0,0,width-1,height-1,3 
  6047.  
  6048.      FindScreen 0
  6049.      
  6050.      ;two sliders for the borders (see new gadget flags next page)
  6051.  
  6052.      PropGadget 0,3,-8,$18000+4+8+64,1,-20,8 
  6053.      PropGadget 0,-14,10,$11000+2+16+128,2,12,-20 
  6054.  
  6055.      ;reporting of mousemoves means we can track the propgadget as it is
  6056.       moved
  6057.  
  6058.      AddIDCMP $10 
  6059.      SizeLimits 32,32,width+22,height+20 
  6060.      Window 0,0,0,100,100,$1489,"HELLO",1,2,0,0 
  6061.      Gosub drawsuper 
  6062.      Repeat 
  6063.        ev.l=WaitEvent 
  6064.        If ev=2 Then Gosub dosize 
  6065.        If ev=$20 Then Gosub domove 
  6066.      Until ev=$200 
  6067.      End 
  6068.  
  6069.      dosize: 
  6070.        SetHProp 0,1,posx/width,InnerWidth/width 
  6071.        SetVProp 0,2,posy/height,InnerHeight/height 
  6072.        Redraw 0,1:Redraw 0,2:Goto drawsuper 
  6073.  
  6074.      domove: 
  6075.        Repeat:Gosub drawsuper:Until WaitEvent<>$10:Return 
  6076.  
  6077.      drawsuper: 
  6078.        ww=width-InnerWidth:hh=height-InnerHeight 
  6079.        posx=QLimit(HPropPot(0,1)*(ww+1),0,ww) 
  6080.        posy=QLimit(VPropPot(0,2)*(hh+1),0,hh) 
  6081.        PositionSuperBitMap posx,posy 
  6082.      Return 
  6083.  
  6084.  
  6085. Statement: GetSuperBitMap & PutSuperBitMap
  6086. --------------------------------------------------------------------------
  6087. Syntax: GetSuperBitMap & PutSuperBitMap
  6088.  
  6089. After rendering changes to a superbitmap window thebitmap attached can 
  6090. also be updated with the GetSuperBitMap. After rendering changes to a 
  6091. bitmap the superbitmap window can be refreshed with the PutSuperBitMap 
  6092. command. Both commands work with the currently used window.
  6093.  
  6094.  
  6095. Statement: WTitle
  6096. --------------------------------------------------------------------------
  6097. Syntax: WTitle windowtitle$,screentitle$
  6098.  
  6099. WTitle is used to alter both the current window's title bar and it's 
  6100. screens title bar. Useful for displaying important stats such as program
  6101. status etc. 
  6102.  
  6103.  
  6104. Statement: CloseWindow
  6105. --------------------------------------------------------------------------
  6106. Syntax: CloseWindow Window#
  6107.  
  6108. CloseWindow has been added for convenience. Same as Free Window but a 
  6109. little more intuitive (added for those that have complained about such
  6110. matters).
  6111.  
  6112.  
  6113. Statement: WPrintScroll
  6114. --------------------------------------------------------------------------
  6115. Syntax: WPrintScroll
  6116.  
  6117.  
  6118. WPrintScroll will scroll the current window upwards if the text cursor 
  6119. is below the bottom of the window and adjust the cursor accordingly. 
  6120. Presently WPrintScroll only works with windows opened with the gimme00
  6121. flag set (#gimmezerozero=$400).
  6122.  
  6123.  
  6124. Statement: WBlit
  6125. --------------------------------------------------------------------------
  6126. Syntax: WBlit Shape#,x,y
  6127.  
  6128. WBlit can be used to blit any shape to the current window. Completely 
  6129. system friendly this command will completely clip the shape to fit 
  6130. inside the visible part of the window. Use GimmeZeroZero windows for 
  6131. clean clipping when the window has title/sizing gadgets.
  6132.  
  6133.  
  6134. Statement: BitMaptoWindow
  6135. --------------------------------------------------------------------------
  6136. Syntax: BitMaptoWindow Bitmap#,Window#[,srcx,srcy,destx,desty,wid,height]
  6137.  
  6138. BitMaptoWindow will copy a bitmap to a window in an operating system 
  6139. friendly manner (what do you expect). The main use of such a command is 
  6140. for programs which use the raw bitmap commands such as the 2D and Blit 
  6141. libraries for rendering bitmaps quickly but require a windowing 
  6142. environment for the user inyerface.
  6143.  
  6144.  
  6145. Functions: EventCode & EventQualifier
  6146. --------------------------------------------------------------------------
  6147. Syntax: EventCode & EventQualifier
  6148.  
  6149. EventCode returns the actual code of the last Event received by your 
  6150. program, EventQualifier returns the contents of the Qualifier field. Of 
  6151. use with the new GadTools library and some other low level event 
  6152. handling requirements. 
  6153.  
  6154.  
  6155. Gadget Library Additions
  6156. --------------------------------------------------------------------------
  6157. Five new flags have been added when defining gadgets in Blitz2. The
  6158. first four are for attaching the gadget to one of the windows borders, 
  6159. the GZZGADGET flag is for attaching the gadget to the "outer" rastport/
  6160. layer of a gimme zero zero window.
  6161.  
  6162. #RIGHTBORDER    $1000   
  6163. #LEFTBORDER     $2000
  6164. #TOPBORDER      $4000
  6165. #BOTTOMBORDER   $8000
  6166. #GZZGADGET      $10000 
  6167.  
  6168. PropGadgets have been upgraded to take advantage of the 2.0 "newlook" 
  6169. when/if available.
  6170.  
  6171.  
  6172. Statement: Toggle
  6173. --------------------------------------------------------------------------
  6174. Syntax: Toggle GadgetList#,Id [,On|Off]
  6175.  
  6176. The Togggle command in the gadget library has been extended so it will
  6177. actually toggle a gadgets status if the no On|Off parameter is missing.
  6178.  
  6179.  
  6180.                             Screen Library Additions
  6181.  
  6182.                                  New commands:
  6183.  
  6184.                                    CLOSESCREEN 
  6185.                                    HIDESCREEN  
  6186.                                    BEEPSCREEN  
  6187.                                    MOVESCREEN  
  6188.                                    SCREENTAGS  
  6189.  
  6190.  
  6191. Statement: CloseScreen
  6192. --------------------------------------------------------------------------
  6193. Syntax: CloseScreen Screen#
  6194.  
  6195. CloseScreen has been added for convenience. Same as Free Screen but a 
  6196. little more intuitive (especially for those that have complained about
  6197. such matters (yes we care)).
  6198.  
  6199.  
  6200. Statement: HideScreen
  6201. --------------------------------------------------------------------------
  6202. Syntax: HideScreen Screen#
  6203.  
  6204. Move Screen to back of all Screens open in the system.
  6205.  
  6206.  
  6207. Statement: BeepScreen
  6208. --------------------------------------------------------------------------
  6209. Syntax: BeepScreen Screen#
  6210.  
  6211. Flash specified screen.
  6212.  
  6213.  
  6214. Statement: MoveScreen
  6215. --------------------------------------------------------------------------
  6216. Syntax: MoveScreen Screen#,deltax,deltay
  6217.  
  6218. Move specified screen by specified amount. Good for system friendly 
  6219. special effects.
  6220.  
  6221.  
  6222. Statement: ScreenTags
  6223. --------------------------------------------------------------------------
  6224. Syntax: ScreenTags Screen#,Title$ [&TagList] or [[,Tag,Data]...]
  6225.  
  6226. Full access to all the Amiga's new display resoutions is now available 
  6227. in Amiga mode by use of the Screen Tags command. The following tags are
  6228. of most interest to Blitz2 programmers: (see autodocs)
  6229.  
  6230. #Left=$80000021  
  6231. #Top=$80000022
  6232. #Width=$80000023
  6233. #Height=$80000024
  6234. #Depth=$80000025
  6235. #DetailPen=$80000026
  6236. #_BlockPen=$80000027
  6237. #Title=$80000028
  6238. #Colors=$80000029
  6239. #ErrorCode=$8000002A
  6240. #Font=$8000002B
  6241. #SysFont=$8000002C
  6242. #Type=$8000002D
  6243. #BitMap=$8000002E
  6244. #PubName=$8000002F
  6245. #PubSig=$80000030
  6246. #PubTask=$80000031
  6247. #DisplayID=$80000032
  6248. #DClip=$80000033
  6249. #Overscan=$80000034
  6250. #Obsolete1=$80000035
  6251.  
  6252. #ShowTitle=$80000036
  6253. #Behind=$80000037
  6254. #_Quiet=$80000038
  6255. #AutoScroll=$80000039
  6256. #Pens=$8000003A
  6257. #FullPalette=$8000003B
  6258. #ColorMapEntries=$8000003C
  6259. #Parent=$8000003D
  6260. #Draggable=$8000003E
  6261. #Exclusive=$8000003F
  6262.  
  6263. #SharePens=$80000040
  6264. #BackFill=$80000041
  6265. #_Interleaved=$80000042
  6266. #Colors32=$80000043
  6267. #VideoControl=$80000044
  6268. #FrontChild=$80000045
  6269. #BackChild=$80000046
  6270. #LikeWorkbench=$80000047
  6271. #Reserved=$80000048
  6272.  
  6273. ; open super wide screen with overscan set for smooth horizontal scroll 
  6274. ; for 2.0 and above with amigalibs.res in resident
  6275. ;
  6276.  
  6277. #_BitMap=$8000002E:#_Overscan=$80000034:#_Width=$80000023:
  6278. #_Height=$80000024 
  6279.  
  6280. BitMap 0,1280,512,2:Circlef 320,256,256,1 
  6281.  
  6282. ScreenTags 0,"TEST",#_BitMap,Addr BitMap(0),#_Overscan,1,#_Width,640,
  6283.                     #_Height,512 
  6284.  
  6285. *vp.ViewPort=ViewPort(0) 
  6286.  
  6287. While Joyb(0)=0 
  6288.      VWait 
  6289.      *vp\DxOffset=-SMouseX,-SMouseY 
  6290.      ScrollVPort_ *vp 
  6291. Wend 
  6292.  
  6293.  
  6294.                             PALETTE LIBRARY ADDITIONS@{FG TEXT
  6295.  
  6296. The Palette library has been modified in BUM5 for two reasons. Firstly,
  6297. it was impossible to perform custom fades using two palettes as the Use
  6298. Palette command affected the current Slice or Screen. Also with the 
  6299. advent of the Display library the extra properties of the Use Palette
  6300. command (copy colors to current Slice or Screen) became unwanted.
  6301.  
  6302.                                  New commands:
  6303.  
  6304.                                   SHOWPALETTE    
  6305.                                   NEWPALETTEMODE 
  6306.  
  6307. The ShowPalette command has been added to replace the above 
  6308. functionality removed from the Use Palette command. Also, for 
  6309. compatability reasons NewPaletteMode On is used for enabling the above
  6310. modifications (default is off).
  6311.  
  6312.  
  6313. Statement: ShowPalette
  6314. --------------------------------------------------------------------------
  6315. Syntax: ShowPalette Palette#
  6316.  
  6317. ShowPalette replaces Use Palette for copying a palette's colours to the
  6318. current Screen or Slice.
  6319.  
  6320.  
  6321. Statement: NewPaletteMode
  6322. --------------------------------------------------------------------------
  6323. Syntax: NewPaletteMode On|Off
  6324.  
  6325. The NewPaletteMode flag has been added for compatibility with older 
  6326. Blitz2 programs. By setting NewPaletteMode to On the Use Palette command
  6327. merely makes the specified palette the current object and does not try 
  6328. to copy the colour information to the current Screen or Slice.
  6329.  
  6330.  
  6331.  
  6332.  
  6333.                    The New Display Library (#displaylib=143)
  6334.  
  6335. The new display library is an alternative to the slice library. 
  6336. Instead of extending the slice library for AGA support a completely new
  6337. display library has been developed.
  6338.  
  6339. Besides support for extended sprites, super hires scrolling and 8 
  6340. bitplane displays a more modular method of creating displays has been 
  6341. implemented with the use of CopLists. CopLists need only be initialised 
  6342. once at the start of the program. Displays can then be created using any
  6343. combination of CopLists and most importantly the CreateDisplay command
  6344. does not allocate any memory avoiding any memory fragmenting problems. 
  6345. The new display library is for non-AGA displays also.
  6346.  
  6347.                            Display Library Commands:
  6348.  
  6349.                       INITCOPLIST              DISPLAYPALETTE  
  6350.                       CREATEDISPLAY            DISPLAYCONTROLS 
  6351.                       DISPLAYBITMAP            DISPLAYADJUST   
  6352.                       DISPLAYSPRITE           
  6353.  
  6354.  
  6355.  
  6356. Statement: InitCopList
  6357. --------------------------------------------------------------------------
  6358. Syntax: InitCopList CopList#,ypos,height,type,sprites,colors,
  6359.         customs[,widthadjust]
  6360.  
  6361. InitCopList is used to create a CopList for use with the CreateDisplay
  6362. command. The ypos, height parameters define the section of screen. 
  6363. Sprites, colors and customs will allocate instructions for that many 
  6364. sprites (always=8!) colors (yes, as many as 256!) and custom copper 
  6365. instructions (to be used by the new DisplayFX library currently in 
  6366. devlopment).
  6367.  
  6368. The widthadjust parameter is currently not implemented, for display 
  6369. widths other than standard see the DisplayAdjust command. The following
  6370. constants make up the type parameter, add the number of bitplanes to the
  6371. total to make up the type parameter.
  6372.  
  6373. #smoothscroll=$10  #dualplayfield=$20 #extrahalfbrite=$40  #ham=$80
  6374. #lores=$000        #hires=$100        #super=$200
  6375. #loressprites=$400 #hiressprites=$800 #supersprites=$c00
  6376. #fmode0=$0000      #fmode1=$1000      #fmode2=$2000         #fmode3=$3000
  6377.  
  6378. For displays on non-AGA machines only #fmode0 and #loressprites are 
  6379. allowed. More documentation, examples and fixes will be published soon 
  6380. for creating displays. 
  6381.  
  6382.  
  6383. Statement: CreateDisplay
  6384. --------------------------------------------------------------------------
  6385. Syntax: CreateDisplay CopList#[,CopList#..]
  6386.  
  6387. CreateDisplay is used to setup a new screen display with the new display
  6388. library. Any number of CopLists can be passed to CreateDisplay although
  6389. at present they must be in order of vertical position and not overlap. 
  6390. CreateDisplay then links the CopLists together using internal pointers, 
  6391. bitmaps, colours and sprites attached to coplists are not affected.
  6392.  
  6393.  
  6394. Statement: DisplayBitMap
  6395. --------------------------------------------------------------------------
  6396. Syntax: DisplayBitMap CopList#,bmap[,x,y] [,bmap[,x,y]]
  6397.  
  6398. The DisplayBitMap command is similar in  usage to the slice libraries' 
  6399. show commands. Instead of different commands for front and back 
  6400. playfields and smooth scroll options there is only the one DisplayBitMap
  6401. command with various parameter options. With AGA machines, the x 
  6402. positioning of lores and hires coplists uses the fractional part of the
  6403. x parameter for super smooth scrolling.The CopList must be initialised 
  6404. with the smooth scrolling flag set if the x,y parameters are used, same
  6405. goes for dualplayfield.
  6406.  
  6407.  
  6408. Statement: DisplaySprite
  6409. --------------------------------------------------------------------------
  6410. Syntax: DisplaySprite CopList#,Sprite#,X,Y,Sprite Channel
  6411.  
  6412. DisplaySprite is similar to the slice libraries ShowSprite command with
  6413. the added advantage of super hires positioning and extra wide sprite 
  6414. handling. 
  6415.  
  6416. See also  SPRITEMODE .
  6417.  
  6418.  
  6419. Statement: DisplayPalette
  6420. --------------------------------------------------------------------------
  6421. Syntax: DisplayPalette CopList#,Palette# [,coloroffset]
  6422.  
  6423. DisplayPalette copies colour information from a Palette to the CopList
  6424. specified.
  6425.  
  6426.  
  6427. Statement: DisplayControls
  6428. --------------------------------------------------------------------------
  6429. Syntax: DisplayControls CopList#,BPLCON2,BPLCON3,BPLCON4
  6430.  
  6431. DisplayControls allows access to the more remote options available in 
  6432. the Amiga's display system. The following are the most important bits 
  6433. from these registers (still unpublished by Commodore!*()@YU&^)
  6434.  
  6435. Bit| BPLCON2                    | BPLCON3                | BPLCON4
  6436. ---+----------------------------+------------------------+------------------
  6437. 15 | *                          | BANK2 * active colour  | BPLAM7 xor with
  6438.    |                            |         bank           |        bitplans
  6439. ---+----------------------------+------------------------+------------------
  6440. 14 | ZDBPSEL2  which bitplane   | BANK1 *                | BPLAM6 DMA for
  6441.    |           for ZD           |                        |        altering
  6442. ---+----------------------------+------------------------+------------------
  6443. 13 | ZDBPSEL1                   | BANK0 *                | BPLAM5 effective
  6444.    |                            |                        |        colour
  6445. ---+----------------------------+------------------------+------------------
  6446. 12 | ZDBPSEL0                   | PF2OF2  col-offset for | BPLAM4 look up
  6447.    |                            |         playfield 2    |
  6448. ---+----------------------------+------------------------+------------------
  6449. 11 | ZDBPEN    makes above bp   | PF2OF1                 | BPLAM3
  6450.    |           hit ZD           |                        |
  6451. ---+----------------------------+------------------------+------------------
  6452. 10 | ZDCTEN    ZD is bit#15 of  | PF2OF0                 | BPLAM2
  6453.    |           colour           |                        |
  6454. ---+----------------------------+------------------------+------------------
  6455. 09 | KILLEHB   *                | LOCT * palette hi/lo   | BPLAM1
  6456.    |                            |        nibble mode     |
  6457. ---+----------------------------+------------------------+------------------
  6458. 08 | RDRAM=0   *                |                        | BPLAM0
  6459. ---+----------------------------+------------------------+------------------
  6460. 07 | SOGEN     ! sync on green  + SPRES1 * sprites-      | ESPRM7 high order
  6461.    |                            |          resolution    |        color
  6462. ---+----------------------------+------------------------+------------------
  6463. 06 | PF2PRI    H playfield 1/2  | SPRES0 *               | ESPRM6 offset for
  6464.    |           priority         |                        |        even
  6465. ---+----------------------------+------------------------+------------------ 
  6466. 05 | PF2P2     H playfield/     | BRDRBLANK border is    | ESPRM5 sprites
  6467.    |           sprite priority  |           black        |
  6468. ---+----------------------------+------------------------+------------------
  6469. 04 | PF2P1                      | BRDNTRAN  border       | ESPRM4
  6470.    |                            |           hits ZD      |
  6471. ---+----------------------------+------------------------+------------------
  6472. 03 | PF1P0                      |                        | OSPRM7 high order
  6473.    |                            |                        |        color
  6474. ---+----------------------------+------------------------+------------------
  6475. 02 | PF1P2                      | ZDCLCKEN  ZD=14Mhz     | OSPRM6 offset for
  6476.    |                            |           clock        |        odd
  6477. ---+----------------------------+------------------------+------------------
  6478. 01 | PF1P1                      | BRDSPRT   sprites in   | OSPRM5 sprites
  6479.    |                            |           borders!     |
  6480. ---+----------------------------+------------------------+------------------
  6481. 00 | PF1P0                      | EXTBLKEN  wo blank     | OSPRM4
  6482.    |                            |           outputl      |
  6483. ---+----------------------------+------------------------+------------------
  6484.  
  6485. !  - Don't touch
  6486. H  - See standard hardware reference manual
  6487. *  - controlled by display library
  6488. ZD - any reference to ZD is only a guess (just sold my genlock)
  6489.  
  6490.  
  6491. Statement: DisplayAdjust
  6492. --------------------------------------------------------------------------
  6493. Syntax: DisplayAdjust CopList#,fetchwid,ddfstrt,ddfstop,diwstrt,diwstop
  6494.  
  6495. Temporary control of display registers until I get the widthadjust 
  6496. parameter working with InitCopList. Currently only standard width 
  6497. displays are available but you can modify the width manually (just stick
  6498. a screwdriver in the back of your 1084) or with some knowledge of 
  6499. Commodores AGA circuitry.
  6500.  
  6501. Anyway, before I start going on about why they couldn't just give us 
  6502. byte per pixel instead of 8 darn bitplanes (CD32 to the rescue!) see 
  6503. the cover disk for more information...
  6504.  
  6505.  
  6506.                               The New ASL Library (#myasllib=80)
  6507.  
  6508. Our policy until now has been that we would only place emphasis on 1.3
  6509. compatible commands unless of course they had to do with AGA. Then again
  6510. I don't even have a LoadWB in my startup-sequence! So instead of 
  6511. complaining I spent an uncomfortable week adding the following 2.0 above
  6512. specific commands to Blitz2.
  6513.  
  6514. And as for those with 1.3 and want new ROMS? BURN BABY BURN...
  6515.  
  6516.                                  The commands:
  6517.  
  6518.                                   ASLFILEREQUEST    
  6519.                                   ASLFONTREQUEST    
  6520.                                   ASLSCREENREQUEST$ 
  6521.  
  6522.  
  6523. Function: ASLFileRequest$
  6524. --------------------------------------------------------------------------
  6525. Syntax: ASLFileRequest$ (Title$,Pathname$,Filename$ [,Pattern$] 
  6526.                          [,x,y,w,h] )
  6527.  
  6528. The ASL File Requester is nice. Except for the highlight bar being 
  6529. invisible on directories you get to use keyboard for everything, stick 
  6530. in a pattern$ to hide certain files and of course you get what ever size
  6531. you want. I made it call the Blitz2 file requester if the program is 
  6532. running under 1.3 (isn't that nice!). There is a fix that patches the 
  6533. ReqTools file requester but that doesn't have the date field.
  6534.  
  6535. I couldn't get the Save-Only tag or the "Create Directory" option 
  6536. working maybe next upgrade.
  6537.  
  6538. EXAMPLE:
  6539.  
  6540. MaxLen pa$=192 
  6541. MaxLen fi$=192 
  6542.  
  6543. FindScreen 0 
  6544.  
  6545. f$=ASLFileRequest$("test",pa$,fi$,"#?.bb",0,0,640,256) 
  6546.  
  6547. If f$ 
  6548.      NPrint f$ 
  6549. Else 
  6550.      NPrint "failed" 
  6551. EndIf 
  6552.  
  6553. MouseWait  
  6554.  
  6555.  
  6556. Function: ASLFontRequest
  6557. --------------------------------------------------------------------------
  6558. Syntax: ASLFontRequest (enable_flags)
  6559.  
  6560. The ASL Font Requester is also pretty useful. The flags parameter 
  6561. enables the user to modify the following options:
  6562.  
  6563. #pen=1:#bckgrnd=2:#style=4:#drawmode=8:#fixsize=16
  6564.  
  6565. It doesn't seem to handle colour fonts, no keyboard shortcuts so perhaps
  6566. patching ReqTools is an option for this one. The following code 
  6567. illustrates how a .fontinfo structure is created by a call to 
  6568. ASLFontRequest (just like programming in a high level language man!).
  6569.  
  6570. EXAMPLE:
  6571.  
  6572. NEWTYPE .fontinfo 
  6573.      name.s 
  6574.      ysize.w 
  6575.      style.b:flags.b 
  6576.      pen1.b:pen2:drawmode:pad 
  6577. End NEWTYPE 
  6578.  
  6579. FindScreen 0 
  6580.  
  6581. *f.fontinfo=ASLFontRequest(15) 
  6582.  
  6583. If *f 
  6584.      NPrint *f\name 
  6585.      NPrint *f\ysize 
  6586.      NPrint *f\pen1 
  6587.      NPrint *f\pen2 
  6588.      NPrint *f\drawmode 
  6589. Else 
  6590.      NPrint "cancelled" 
  6591. EndIf 
  6592.  
  6593. MouseWait 
  6594.  
  6595.  
  6596. Function: ASLScreenRequest
  6597. --------------------------------------------------------------------------
  6598. Syntax: ASLScreenRequest (enable_flags)
  6599.  
  6600. Those who are just getting to grips with 2.0 and above will find this 
  6601. command makes your programs look really good, however I haven't got time
  6602. to explain the difficulties of developing programs that work in all 
  6603. screen resolutions (what are ya?).
  6604.  
  6605. EXAMPLE:
  6606.  
  6607. #width=1:#height=2:#depth=4:#overscan=8:#scroll=16
  6608.  
  6609. NEWTYPE .screeninfo 
  6610.      id.l 
  6611.      width.l 
  6612.      height.l 
  6613.      depth.w 
  6614.      overscan.w 
  6615.      autoscroll.w 
  6616.      bmapwidth.l 
  6617.      bmapheight.l 
  6618. End NEWTYPE 
  6619.  
  6620. FindScreen 0 
  6621.  
  6622. *sc.screeninfo=ASLScreenRequest(31) 
  6623.  
  6624. If *sc 
  6625.      NPrint *sc\width," ",*sc\height," ",*sc\depth 
  6626. Else 
  6627.      NPrint "cancelled" 
  6628. EndIf 
  6629. MouseWait 
  6630.  
  6631.  
  6632.                             The New GadTools Library (#mygadtoolslib=141)
  6633.  
  6634. GadTools is a 2.0 and greater extension to the operating system that 
  6635. gives the Amiga programmer a few extra enhancements to create juicy user
  6636. interfaces with. Instead of listing each as a separate command this 
  6637. issue I'll just add a brief description and a relevant taglist to each
  6638. of the 12 gadgets.
  6639.  
  6640.                                  The Commands:
  6641.  
  6642.                        ATTACHGTLIST             GTBEVELBOX   
  6643.                        GTTAGS                   GTCHANGELIST 
  6644.                        GTGADPTR                 GTSETATTRS   
  6645.  
  6646. You are allowed both standard gadgets and GadTools ones in the same 
  6647. window, of course id clashes must be avoided and unlike standard 
  6648. gadgets, gadtools gadgets are attached to the Window after it is open 
  6649. with the AttachGTList command.
  6650.  
  6651. GTButton GTList#,id,x,y,w,h,Text$,flags
  6652.  
  6653. Same as Blitz2's TextGadget but with the added flexibility of placing 
  6654. the label Text$ above, below to the left or right of the button 
  6655. (see flags).
  6656.  
  6657. GTCheckBox GTList#,id,x,y,w,h,Text$,flags
  6658.  
  6659. A box with a check mark that toggles on and off, best used for options 
  6660. that are either enabled or disabled. 
  6661.  
  6662. GTCycle GTList#,id,x,y,w,h,Text$,flags,Options$
  6663.  
  6664. Used for offering the user a range of options, the options string 
  6665. should be a list of options separated by the | character eg. "HIRES }
  6666. LORES } SUPERHIRES"
  6667.  
  6668. GTInteger GTList#,id,x,y,w,h,Text$,flags,default
  6669.  
  6670. A string gadget that allows only numbers to be entered by the user.
  6671.  
  6672. GTListView GTList#,id,x,y,w,h,Text$,flags,list()
  6673.  
  6674. The ListView gadget enaables the user to scroll through a list of 
  6675. options. These options must be contained in a string field of a Blitz2
  6676. linked list. Currently this string field must be the second field, the 
  6677. first being a word type.
  6678.  
  6679. GTMX GTList#,id,x,y,w,h,Text$,flags,Options$
  6680.  
  6681. GTMX is an exclusive selection gadget , the Options$ is the same as 
  6682. GTCycle in format, GadTools then displays all the options in a vertical
  6683. list each with a hi-light beside them.
  6684.  
  6685. GTNumber GTList#,id,x,y,w,h,Text$,flags,value
  6686.  
  6687. This is a readonly gadget (user cannot interact with it) used to display
  6688. numbers.
  6689.  
  6690. GTPalette GTList#,id,x,y,w,h,Text$,flags,depth
  6691.  
  6692. Creates a number of coloured boxes relating to a colour palette, 
  6693.  
  6694. GTScroller GTList#,id,x,y,w,h,Text$,flags,Visible,Total
  6695.  
  6696. A prop type gadget for the user to control an amount or level, is 
  6697. accompanied by a set of arrow gadgets.
  6698.  
  6699. GTSlider GTList#,id,x,y,w,h,Text$,flags,Min,Max
  6700.  
  6701. Same as Scroller but for controlling the position of display inside a 
  6702. larger view.
  6703.  
  6704. GTString GTList#,id,x,y,w,h,Text$,flags,MaxChars
  6705.  
  6706. A standard string type gadget
  6707.  
  6708. GTText GTList#,id,x,y,w,h,Text$,flags,Display$
  6709.  
  6710. A read only gadget (see GTNumber) for displaying text messages.
  6711.  
  6712. The parameters x,y,w,h refer to the gadgets position and size, the Text$
  6713. is the label as referred to above. The flags field is made up of the 
  6714. following fields:
  6715.  
  6716. #_LEFT=1  ;positioning of the optional gadget label Text$ 
  6717. #_RIGHT=2 
  6718. #_ABOVE=4 
  6719. #_BELOW=8 
  6720. #_IN=$10
  6721. #_High=$20       ;highlight 
  6722. #_Disable=$40    ;turned off 
  6723. #_Immediate=$80  ;activate on gadgetdown 
  6724. #_BoolValue=$100 ;checkbox on 
  6725. #_Scaled=$200    ;scale arrows for slider 
  6726. #_Vertical=$400  ;make slider/scroller vertical
  6727.  
  6728.  
  6729.  
  6730. Statement: AttachGTList
  6731. --------------------------------------------------------------------------
  6732. Syntax: AttachGTList GTList#,Window#
  6733.  
  6734. The AttchGTList command is used to attach a set of GadTools gadgets to a
  6735. Window after it has been opened.
  6736.  
  6737.  
  6738. Statement: GTTags
  6739. --------------------------------------------------------------------------
  6740. Syntax: GTTags Tag,Value [,Tag,Value...]
  6741.  
  6742. The GTTags command can be used prior to initialisation of any of the 12
  6743. gadtools gadgets to preset any relevant Tag fields. The following are 
  6744. some useful Tags that can be used with GTTags:
  6745.  
  6746. #tag=$80080000
  6747. #GTCB_Checked=#tag+4      ; State of checkbox
  6748. #GTLV_Top=#tag+5          ; Top visible item in listview
  6749. #GTLV_ReadOnly=#tag+7     ; Set TRUE if listview is to be ReadOnly
  6750. #GTMX_Active=#tag+10      ; Active one in mx gadget
  6751. #GTTX_Text=#tag+11        ; Text to display
  6752. #GTNM_Number=#tag+13      ; Number to display
  6753. #GTCY_Active=#tag+15      ; The active one in the cycle gad
  6754. #GTPA_Color=#tag+17       ; Palette color
  6755. #GTPA_ColorOffset=#tag+18 ; First color to use in palette
  6756. #GTSC_Top=#tag+21         ; Top visible in scroller
  6757. #GTSC_Total=#tag+22       ; Total in scroller area
  6758. #GTSC_Visible=#tag+23     ; Number visible in scroller
  6759. #GTSL_Level=#tag+40       ; Slider level
  6760. #GTSL_MaxLevelLen=#tag+41 ; Max length of printed level
  6761. #GTSL_LevelFormat=#tag+42 ;* Format string for level
  6762. #GTSL_LevelPlace=#tag+43  ;* Where level should be placed
  6763. #GTLV_Selected=#tag+54    ; Set ordinal number of selected
  6764. #GTMX_Spacing=#tag+61     ;* Added to font height to
  6765.  
  6766. All of the above except for those marked * can be set after 
  6767. initialisation of the Gadget using the GTSetAttrs command. The following 
  6768. is an example of creating a slider gadget with a numeric display:
  6769.  
  6770. f$="%2ld" : GTTags #GTSLLevelFormat, &f$, #GTSLMaxLevelLen, 4
  6771. GTSlider 2,10,320,120,200,20,"GTSLIDER",2,0,10
  6772.  
  6773.  
  6774. Function: GTGadPtr
  6775. --------------------------------------------------------------------------
  6776. Syntax: GTGadPtr (GTList#,id)
  6777.  
  6778. GTGadPtr returns the actual location of the specified GadTools gadget in
  6779. memory.
  6780.  
  6781.  
  6782. Statement: GTBevelBox
  6783. --------------------------------------------------------------------------
  6784. Syntax: GTBevelBox GTList#,x,y,w,h,flags
  6785.  
  6786. GTBevelBox is the GadTools library equivalent of the Borders command and
  6787. can be used to render frames and boxes in the currently used Window.
  6788.  
  6789.  
  6790. Statement: GTChangeList
  6791. ---------------------------------------------------------------------------
  6792. Syntax: GTChangeList GTList#,id [ ,List() ]
  6793.  
  6794. GTChangeList must be used whenever a List attached to a GTListView needs
  6795. to be modified. Call GTChangeList without the List() parameter to free 
  6796. the List, modify it then reattache it with another call to GTChangeList
  6797. this time using the List() parameter.
  6798.  
  6799.  
  6800. Statement: GTSetAttrs
  6801. --------------------------------------------------------------------------
  6802. Syntax: GTSetAttrs GTList#,id [,Tag,Value...]
  6803.  
  6804. GTSetAttrs can be used to modify the status of certain GadTools gadgets 
  6805. with the relevant Tags. See GTTags for more information on the use of 
  6806. Tags with the GadTools library.
  6807.  
  6808.  
  6809.                                 PRINTER LIBRARY
  6810.  
  6811. This is a library for using the printer.device!!! There are only four 
  6812. commands included, but I think these are the most wanted ones...
  6813.  
  6814.                                  The Commands:
  6815.  
  6816.                                     CHECKPRT   
  6817.                                     PRTCOMMAND 
  6818.                                     PRTTEXT    
  6819.                                     HARDCOPY   
  6820.  
  6821.  
  6822. Statement: CheckPrt
  6823. --------------------------------------------------------------------------
  6824. Syntax: status.b=CheckPrt
  6825.  
  6826. Modes : AMIGA/BLITZ
  6827.  
  6828. Description:
  6829. Checks the state of the Printer and return it.
  6830.  
  6831. status: -1 = Printer Off
  6832.         -3 = Printer Offline
  6833.         -4 = Printer On
  6834. Bugs:
  6835.  
  6836. I had exculded this Routine, because it doesn' t worked 100%...I have 
  6837. now reincluded it and compiled with the newest version of the BB2 
  6838. compiler...It seems that it now works 100%...
  6839.  
  6840.  
  6841. Statement: PrtCommand
  6842. --------------------------------------------------------------------------
  6843. Syntax: PrtCommand Command,Para1,Para2,Para3,Para4
  6844.  
  6845. Modes : AMIGA
  6846.  
  6847. Description:
  6848. Send a ESC-Sequence to the printer.
  6849.  
  6850. Command: Escape-Sequence
  6851.  
  6852. Para1 - Para 4: Parameters for ESC-Sequence
  6853.  
  6854. Beispiel: PrtCommand 6,0,0,0,0 ;Kursiv on
  6855.           PrtCommand 7,0,0,0,0 ;Kursiv off
  6856.  
  6857. Statement: PrtText
  6858. --------------------------------------------------------------------------
  6859. Syntax: PrtText <STRING>
  6860.  
  6861. Mode  : AMIGA
  6862.  
  6863. Description:
  6864.  
  6865. PrtText: Prints the text 'STRING' at your printer...
  6866.          It' s the same like WriteFile(0,"PRT:"), but why have the AMIGA
  6867.          a own printer.device...
  6868.          So I think we should use it, right?
  6869.  
  6870.  
  6871. Statement: Hardcopy
  6872. --------------------------------------------------------------------------
  6873. Syntax: Hardcopy ScreenPointer,X,Y,Width,Height,PrtWidth,PrtHeight,Flags
  6874.  
  6875. Mode  : AMIGA
  6876.  
  6877. Description:
  6878. Prints the screen or a part of it at your printer.
  6879.  
  6880. ScreenPointer: Adress of the screen (Addr Screen(x))
  6881. X............: \ Are the corners of the screen where we
  6882. Y............: / want to start printing it to paper...
  6883. Width........: Width of the screen part you want to print
  6884. Height.......: Height of the screen part you want to print
  6885. PrtWidth.....: Width of the print(on the paper)
  6886. PrtHeight....: Height of the print(on the paper)
  6887. Flags........: Printerflags...
  6888.                Have a look to a documantation aout it, the most 
  6889.                importent(?) ones:
  6890.  
  6891.                $40  - Centre graphic
  6892.                $10  - Weidth= Maximum
  6893.                $20  - Height = Maximum
  6894.                $100,$200,$300,$400 - Printing quality($400 = Heighest)
  6895.  
  6896. Bugs:
  6897.  
  6898. Hm, it seems that the flags are not 100% taken...I haven' t find out 
  6899. why, but might be you do...I still working on it! But however, it 
  6900. works..
  6901.  
  6902. BTW: This library is copyright 1992/93 by Andre Bergmann.
  6903.      Use it on your own risk, I don' t take the responsibility for using 
  6904.      it! This source is PD, feel free to update it!
  6905.      Please send me updates done by you and Bug Reports!
  6906.   
  6907. Andre Bergmann
  6908. Am Pannesbusch 39a
  6909. 42281 Wuppertal 2
  6910. Germany
  6911. Tel: 0049/0202/702606
  6912.  
  6913.  
  6914.                                 CONSOLE LIBRARY
  6915. --------------------------------------------------------------------------
  6916.  
  6917.                         ConsoleLib (a little buggy yet):
  6918.  
  6919.                                    OPENCONSOLE  
  6920.                                    PRINTCON     
  6921.                                    NPRINTCON    
  6922.                                    CLOSECONSOLE 
  6923.  
  6924.  
  6925. Command: OpenConsole
  6926. --------------------------------------------------------------------------
  6927. Syntax : OpenConsole Window#,Console#
  6928.  
  6929. Description:
  6930. Open a CON: Port for the window, so ANSI output is possible.
  6931.  
  6932.  
  6933. Command: PrintCon
  6934. --------------------------------------------------------------------------
  6935. Syntax:  PrintCon Console#,Expression
  6936.  
  6937. Description:
  6938. Write text to window-console.
  6939.  
  6940.  
  6941. Command: NprintCon
  6942. --------------------------------------------------------------------------
  6943. Syntax:  NPrintCon Console#,Expression
  6944.  
  6945. Description:
  6946. Write text to window-console, and add a Linefeed.
  6947.  
  6948.  
  6949. Command: CloseConsole
  6950. --------------------------------------------------------------------------
  6951. Syntax:  CloseConsole Console#
  6952.  
  6953. Description:
  6954. Close the CON: Port, but NOT the window itself!
  6955.  
  6956. Note:
  6957. These command work if you use them only for ONE window...If you wanna 
  6958. use the CON's for more windows, so that object are use it doesn' t work 
  6959. anymore... Ya see, I need ya help, please...
  6960.  
  6961.  
  6962.                                  CRUNCH LIBRARY
  6963.  
  6964.                               Available Commands:
  6965.  
  6966.                                    IMPLODE     
  6967.                                    DEPLODE     
  6968.                                    CRMDECRUNCH 
  6969.                                    PPDECRUNCH  
  6970.  
  6971.  
  6972. Function: Implode
  6973. --------------------------------------------------------------------------
  6974. Syntax:   Implode Error/CrunchedLen=Bufferadr,DataLen,?Callback
  6975.  
  6976. Description:
  6977. Crunch a buffer using the Imploder algorythm. The ?Callback could be a 0
  6978. for no own routine or a pointer to an own routine for display or abort 
  6979. checking. If the Imploder command jump to the callback in register d0 
  6980. the current crunch position is presend. The callback itself have to 
  6981. return True for cont crunching or False for a break!
  6982.  
  6983. The command return the crunched buffer len or of course a break or an 
  6984. error. If a <0 is returned the callback returned a userbreak, a return 
  6985. of 0 means an error happens. Else the new buffer len is returned.
  6986.  
  6987.  
  6988. Function: Deplode
  6989. --------------------------------------------------------------------------
  6990. Syntax:   Deplode Success=Startadr
  6991.  
  6992. Description:
  6993. Decrunch a Imploder-Crunched buffer. There is no need to give the 
  6994. crunched buffer len to the command, imploder handle this by itself. But
  6995. be careful, if the alloceted buffer hasn' t enought space the program 
  6996. crash.
  6997.     
  6998.     The buffer has to have a header like this:
  6999.  
  7000.     Type  Offset  Contents                  Function
  7001.     LONG  0       "IMP!"                    To recongnize crunched files
  7002.     LONG  4       Original Len              Datalen before packing
  7003.     LONG  8       Crunched Len-$32          Datalen after packing
  7004.     
  7005.     So $a is the start of the datas...
  7006.  
  7007.     The decrunch routine NEED this header to decrunch!!!
  7008.     Do memoryallocation for the buffer using a allocate for the 
  7009.     Startadr+$4 size.
  7010.  
  7011.  
  7012. Command: CrMDecrunch
  7013. --------------------------------------------------------------------------
  7014. Syntax:  CrMDecrunch Bufferadr [,Destinationadr]
  7015.  
  7016. Description:
  7017. If the only parameter is the Bufferadr this routine works like the 
  7018. Deplode command, but decrunch a CrunchMania crunched file. If you use it
  7019. with to parameters the decrunch will be done from Bufferadr to 
  7020. Destinationadr, so 2 buffers have to been allocated. 
  7021.  
  7022.     The header for CrunchMania files have to look like this:
  7023.  
  7024.     Type  Offset  Contents                   Function
  7025.     --------------------------------------------------------------------
  7026.     LONG  0       "CrM!"/"CrM2"              To recongnize crunched 
  7027.                                              files.
  7028.     
  7029.     WORD  4       Minimum Security Distance  To savely decrunch Data 
  7030.                                              when Source AND Dest is
  7031.                                              in the same Memoryblock.
  7032.  
  7033.     LONG  6       Original Len               Datalen before packing
  7034.  
  7035.     LONG  10 ($a) Crunched Len               Datalen after packing 
  7036.                                              without header.
  7037.  
  7038.     So at $d is the data startadress.
  7039.  
  7040.     This header is NEEDED for decrunching!
  7041.  
  7042.  
  7043. Command: PPDecrunch
  7044. --------------------------------------------------------------------------
  7045. Syntax: PPDecrunch Bufferadr,Bufferend,Destinationadr
  7046.  
  7047. Description:
  7048. This command decrunch a PowerPacker crunched file. PowerPacker need two
  7049. buffers for decrunching. Also the lenght of the buffer must be given!
  7050.  
  7051. Sorry, I can' t find my PowerPacker archive where the header is 
  7052. descripted...Like Imploder and CrunchMania PowerPacker also support his 
  7053. own file header.
  7054.  
  7055. Please have a look at the PowerPacker(.library) documentation!
  7056.  
  7057.  
  7058.                                  LOCALE LIBRARY
  7059. --------------------------------------------------------------------------
  7060.  
  7061.                               Available commands:
  7062.  
  7063.                                    ISLOCALE     
  7064.                                    USECATALOG   
  7065.                                    FREECATALOG  
  7066.                                    GETLOCALESTR 
  7067.  
  7068.  
  7069. Function: IsLocale
  7070. --------------------------------------------------------------------------
  7071. Syntax:   result=IsLocale
  7072.  
  7073. Description:
  7074. There is now way to check the ROM-Version of the Kickstart for locale 
  7075. presents. Both, OS 2.0 and 2.1 have the ROM-Version 37.175! So the 
  7076. command returns if the locale.library exists on the system.
  7077.  
  7078.  
  7079. Command: UseCatalog
  7080. --------------------------------------------------------------------------
  7081. Syntax: UseCatalog Catalogname
  7082.  
  7083. Description:
  7084. Opens the catalog for your programm. Might by your program is called 
  7085. BB2Program the catalog should be called BB2Program.catalog. But you're 
  7086. also able to open a catalog from an other program, like Term.catalog.
  7087.  
  7088. The catalog files are in an IFF format!!! Read the Commodore 
  7089. documentation of it...
  7090.  
  7091.  
  7092. Command: FreeCatalog
  7093. --------------------------------------------------------------------------
  7094. Syntax:  FreeCatalog
  7095.  
  7096. Description:
  7097. Removes the catalog that you opened with UseCatalog.
  7098.  
  7099.  
  7100. Function: GetLocaleStr
  7101. --------------------------------------------------------------------------
  7102. Syntax: GetLocaleStr #StringNumber,DefaultString$
  7103.  
  7104. Description:
  7105. Read a string from the catalog that you opened with UseCatalog. You have
  7106. to give a defaultstring to that command. If the asked string could be 
  7107. find in the catalog the default string will be returned. Else the string 
  7108. from the catalog will be returned.
  7109.  
  7110.  
  7111.                                REQUESTER LIBRARY
  7112. --------------------------------------------------------------------------
  7113.  
  7114.                               Available Commands:
  7115.  
  7116. Function: EasyRequest
  7117. --------------------------------------------------------------------------
  7118. Syntax:   EasyRequest Result=EasyRequest([#Window,]title$,body$,gtext$)
  7119.  
  7120. Description:
  7121. A intuition system requester will be open. Optional you could give a 
  7122. window number. The title$ is the displayed string in the top. body$ is 
  7123. the displayed text in the requester, a Chr$(10) means a linefeed.
  7124.  
  7125. gtext$ is the text for the gadgets. Every gadgettext will be added by a 
  7126. '|'.  
  7127.  
  7128. Examples:  "Ok" will only display one gadget in the requester.
  7129.            "Ok|Cancel" add two gadgets to it.
  7130.            "1|2|3|4|5" five gadgets are displayed.
  7131.  
  7132.  
  7133.  
  7134.                              AMIGA SUPPORT LIBRARY
  7135. --------------------------------------------------------------------------
  7136.  
  7137.                               Available Commands:
  7138.  
  7139.                                    ALLOCMEM     
  7140.                                    FREEMEM      
  7141.                                    ISEVEN       
  7142.                                    SEARCHSTRING 
  7143.  
  7144.  
  7145. Function: AllocMem
  7146. --------------------------------------------------------------------------
  7147. Syntax:   MemoryBlock=AllocMem(Size,Type)
  7148.  
  7149. Description:
  7150. Unlike calling Exec's AllocMem_ command directly Blitz2 will automatically
  7151. free any allocated memory when the program ends. Programmers are advised
  7152. to use the InitBank command.
  7153.  
  7154. Flags that can be used with the memory type parameter are:
  7155.  
  7156. 1=public    ;fast is present
  7157. 2=chipmem
  7158. 65536=clear ;clears all memory allocated with 0's
  7159.  
  7160.  
  7161. Command: FreeMem
  7162. --------------------------------------------------------------------------
  7163. Syntax:  FreeMem MemoryBlock,ByteSize
  7164.          (long)    (long)
  7165.  
  7166. Description:
  7167. Deallocates memory obtained with AllocMem
  7168.  
  7169.  
  7170. Function: IsEven
  7171. --------------------------------------------------------------------------
  7172. Syntax:   Result=IsEven(Expression)
  7173.           (bool)  (byte,word,long)
  7174.  
  7175. Description:
  7176. Returns true if Expression is even.  Of use when requesting a value from
  7177. a user that MUST be even.
  7178.  
  7179.  
  7180. Function: SearchString
  7181. --------------------------------------------------------------------------
  7182. Syntax:   result=SearchString(StringPointer,StartAddress,BlockLength)
  7183.           (long)                (&string)    (long)        (long)
  7184.  
  7185. Description:
  7186. Finds a string in the given memory block and returns its address. 
  7187. Returns False otherwise.
  7188.  
  7189.  
  7190.       BUM #6 contains almost all the PD commands of Elmore and some more.
  7191.  
  7192.                          DOS ELMORE LIBRARY      
  7193.                          HARDWARE ELMORE LIBRARY 
  7194.                          MATH ELMORE LIBRARY     
  7195.                          ARRAY ELMORE LIBRARY    
  7196.                          SYS ELMORE LIBRARY      
  7197.                          STRING ELMORE LIBRARY   
  7198.                          LIBRARY PROGRAMMING     
  7199.  
  7200.                                  New in BUM7 :
  7201.  
  7202.                          INCLUDE LIBRARY         
  7203.  
  7204.                              (For the uninitiated:)
  7205.  
  7206.                   NOTE ON FUNCTIONS, STATEMENTS and COMMANDS:
  7207.                   -------------------------------------------
  7208.  
  7209. "FUNCTIONS" are Blitz2 tokens that require parameters in parentheses, 
  7210. and return a value: n=ABS(m)
  7211.  
  7212. "STATEMENTS" are Blitz2 tokens that only perform an action but do not 
  7213. return a value.  Their arguments do not require parentheses:
  7214. PRINT "HELLO!"
  7215.  
  7216. "COMMANDS" are Blitz2 tokens that can be used as either a FUNCTION or 
  7217. a STATEMENT, depending upon whether the arguments were in parentheses or
  7218. not.
  7219.  
  7220. [Function form:]
  7221. n=REQUEST("TITLE","SELECT YES OR NO","YES|NO")
  7222.  
  7223. [Statement form:]
  7224. REQUEST "TITLE","SELECT OK TO CONTINUE","OK"
  7225.  
  7226.  
  7227.                                DOS.ELMORE LIBRARY
  7228. --------------------------------------------------------------------------
  7229.  
  7230.                          CHDIR               ENTRYHOUR     
  7231.                          PATHLOCK            ENTRYMINS     
  7232.                          COPYFILE            ENTRYSECS     
  7233.                          SETCOPYBUFFER       ENTRYCOMMENT$ 
  7234.                          NAMEFILE            ANALYZEDISK   
  7235.                          MAKEDIR             DISKUNIT      
  7236.                          MOREENTRIES         DISKERRS      
  7237.                          ENTRYNAME$          DISKCAPACITY  
  7238.                          ENTRYDIR            DISKUSED      
  7239.                          ENTRYBIT$           DISKFREE      
  7240.                          ENTRYSIZE           DISKBLOCKS    
  7241.                          ENTRYDATE     
  7242.  
  7243.                                 DIRECTORY EXAMPLE 
  7244.  
  7245.  
  7246.  
  7247. Command: CHDIR
  7248. --------------------------------------------------------------------------
  7249. Syntax: CHDIR "Path:"  -or-  IF CHDIR("Path:") Then...
  7250.  
  7251. This command will change the current working directory for ALL disk-
  7252. related commands.  Used as a function, a value of TRUE will be returned
  7253. if the directory change was successful, or FALSE if it was unsuccessful.
  7254.  
  7255.  
  7256. Function: PATHLOCK
  7257. --------------------------------------------------------------------------
  7258. Syntax: Lock.l=PATHLOCK
  7259.  
  7260. This function will return the BCPL pointer to the lock of the current
  7261. directory.  You should NEVER "Unlock_" this lock, but it is useful to
  7262. use command "NameFromLock_" with it to determine the full pathname of
  7263. the current directory, for example.  (NOTE: NameFromLock_ requires 2.0
  7264. and above!)
  7265.  
  7266.  
  7267. Command: COPYFILE
  7268. --------------------------------------------------------------------------
  7269. Syntax: COPYFILE "First","SECOND"  -or-  IF COPYFILE("FIRST","SECOND") Then...
  7270.  
  7271. This command will copy files, much like the CLI command "Copy."  In the
  7272. function form, it will return TRUE for success, and FALSE for failure.
  7273. Note that the speed at which it copies can be increased by increasing the
  7274. "CopyBuffer," which defaults to 8192 bytes.  (See below)
  7275.  
  7276.  
  7277. Statement: SetCopyBuffer
  7278. --------------------------------------------------------------------------
  7279. Syntax: SetCopyBuffer BUFFERSIZE
  7280.  
  7281. This statement is used to set the size of the COPYFILE command's memory
  7282. buffer.  The default size is 8192 bytes, but this can be adjusted from
  7283. 256 bytes to nearly all your free memory.  A larger buffer will normally
  7284. increase the speed at which the COPYFILE command operates, but only up to
  7285. the size of the largest file you're copying.  For example, if the largest
  7286. file you need to copy is 25000 bytes, then it will be useless to set the
  7287. COPYBUFFER above 25000.
  7288.  
  7289.  
  7290. Command: NAMEFILE
  7291. --------------------------------------------------------------------------
  7292. Syntax: NAMEFILE "Oldname","Newname"  -or-
  7293.         IF NAMEFILE("Oldname","Newname") Then...
  7294.  
  7295. This command returns FALSE for failure, TRUE for success:
  7296. The file "oldname" is renamed to "newname," if possible, and may be moved
  7297. to other directories within the same volume.  It is not yet possible to
  7298. use NAMEFILE to move a file from one volume to another, however.
  7299.  
  7300.  
  7301. Command: MAKEDIR
  7302. --------------------------------------------------------------------------
  7303. Syntax: NAMEFILE "Path:Dir"  -or-  If NAMEFILE("Path:Dir") Then...
  7304.  
  7305. This command will attempt to create a new directory with the given pathname.
  7306. It is only possible to create one level at a time, however.  For example,
  7307. MAKEDIR will fail if you attempt to MAKEDIR "RAM:New/Data" if the directory
  7308. "RAM:New" does not yet exist.  Used as a function, MAKEDIR returns TRUE for
  7309. success, and FALSE for failure.
  7310.  
  7311.  
  7312. Command: MOREENTRIES
  7313. --------------------------------------------------------------------------
  7314. Syntax: MOREENTRIES  -or-  If MOREENTRIES Then...
  7315.  
  7316. This command will read the next entry in the current directory for
  7317. inspection with other "ENTRY" commands.  Used within a loop, it is easy
  7318. to read an entire directory with these commands, similar to the "DIR" or
  7319. "LIST" commands of AmigaDOS.  (See below.  An example follows)
  7320.  
  7321.  
  7322. Function: ENTRYNAME$
  7323. --------------------------------------------------------------------------
  7324. Syntax: n$=ENTRYNAME$
  7325.  
  7326. This function returns the name of the current directory entry.  If used
  7327. before the fist "MOREENTRIES" command, it will return the name of the
  7328. current directory.  (Just the current directory's name, not the full
  7329. path name)
  7330.  
  7331.  
  7332. Function: ENTRYDIR
  7333. --------------------------------------------------------------------------
  7334. Syntax: If ENTRYDIR Then...
  7335.  
  7336. This function returns TRUE if the current entry is a sub-directory, or
  7337. FALSE if it is a file.
  7338.  
  7339.  
  7340. Function: ENTRYBITS$
  7341. --------------------------------------------------------------------------
  7342. Syntax: n$=ENTRYBITS$
  7343.  
  7344. This function returns a string containing the protection-bits status of
  7345. the current file or directory.  An example may be "----RWED"  the same
  7346. format as given by the AmigaDOS "LIST" command.  Possible bit settings
  7347. are HSARWED:  H=HIDDEN, S=SCRIPT, A=ARCHIVED, R=READABLE, W=WRITEABLE,
  7348. E=EXECUTEABLE, D=DELETEABLE.
  7349. Any bits that are not set will have the "-" character in their place.
  7350.  
  7351.  
  7352. Function: ENTRYSIZE
  7353. --------------------------------------------------------------------------
  7354. Syntax: n.l=ENTRYSIZE
  7355.  
  7356. This function returns the size in bytes of the current directory entry.
  7357. Note that sub-directories return a size of zero whether they are empty
  7358. or not.
  7359.  
  7360.  
  7361. Function: ENTRYDATE
  7362. --------------------------------------------------------------------------
  7363. Syntax: d$=DATE$(ENTRYDATE)
  7364.  
  7365. This function returns the date the current entry was last modified, in
  7366. the same format as SYSTEMDATE uses.  (The number of days since 1/1/1978)
  7367. Thus, you may use the DATE$ and DATEFORMAT commands to translate it into
  7368. a string with a more human-readable string.
  7369.  
  7370.  
  7371. Function: ENTRYHOUR, ENTRYMINS, ENTRYSECS
  7372. --------------------------------------------------------------------------
  7373. Syntax: h=ENTRYHOUR:m=ENTRYMINS:s=ENTRYSECS
  7374.  
  7375. ENTRYHOUR:
  7376. This function is related to ENTRYDATE, above, but returns the hour of the
  7377. day (0-23) at which the entry was last modified.
  7378.  
  7379. ENTRYMINS:
  7380. Returns the minute (0-59) of the time at which the entry was modified.
  7381.  
  7382. ENTRYSECS:
  7383. Returns the second (0-59) of the time at which the entry was modified.
  7384.  
  7385.  
  7386. Function: ENTRYCOMMENT$
  7387. --------------------------------------------------------------------------
  7388. Syntax: c$=ENTRYCOMMENT$
  7389.  
  7390. This function will return the string containing the filenote for the
  7391. current directory entry, or "" if there is none.
  7392.  
  7393.  
  7394. *********************
  7395. * DIRECTORY EXAMPLE *
  7396. *********************
  7397.  
  7398. This example will list the entries in RAM: in a format very similar
  7399. to the AmigaDOS "LIST" command.  Note that you need to "ChDir" to
  7400. a directory in order to read it from the first entry again.
  7401.  
  7402.  
  7403. ChDir "RAM:"
  7404.  
  7405. While MoreEntries
  7406.   Print LSet$(EntryName$,30)
  7407.   If EntryDIR then Print "Dir   " Else Print LSet$(Str$(EntrySize),6)
  7408.   Print EntryBits$," ",Date$(EntryDate)," "
  7409.   Print EntryHour,":",Right$("0"+Str$(EntryMins),2),":"
  7410.   NPrint Right$("0"+Str$(EntrySecs),2)
  7411. Wend
  7412. MouseWait
  7413.  
  7414.  
  7415. Command: ANALYZEDISK
  7416. --------------------------------------------------------------------------
  7417. Syntax: ANALYZEDISK "DRIVE:"  -or-  If ANALYZEDISK "DRIVE:" Then...
  7418.  
  7419. This command returns FALSE if the specified device or pathname was not
  7420. valid.  If successful, details about the specified drive can be read with
  7421. the following "DISK" functions.  The values for these functions will not
  7422. change until ANALYZEDISK is executed again, either on the same drive or
  7423. another one.
  7424. Note:  If given a full pathname, such as "DF0:System/Utilities" this
  7425. command will still know enough to analyze the disk "DF0:"
  7426.  
  7427.  
  7428. Function: DISKUNIT
  7429. --------------------------------------------------------------------------
  7430. Syntax: n=DISKUNIT
  7431.  
  7432. This function will return the unit number of the most recently analyzed
  7433. disk.  DF0: for example, would return zero, while DF1: would return 1.
  7434.  
  7435.  
  7436. Function: DISKERRS
  7437. --------------------------------------------------------------------------
  7438. Syntax: n=DISKERRS
  7439.  
  7440. This function will return the number of soft errors DOS knows about on
  7441. the last analyzed disk.  This should normally be zero.
  7442.  
  7443.  
  7444. Function: DISKCAPACITY
  7445. --------------------------------------------------------------------------
  7446. Syntax: n=DISKCAPACITY
  7447.  
  7448. This function returns the capacity in bytes of the last analyzed drive.
  7449. For example, a fastfilesystem-formatted disk's max capacity is 837K, so
  7450. DISKCAPACITY would return 857904, which divided by 1024 is 837.
  7451.  
  7452.  
  7453. Function: DISKUSED
  7454. --------------------------------------------------------------------------
  7455. Syntax: n=DISKUSED
  7456.  
  7457. This function returns the number of bytes actually in-use on the last
  7458. analyzed drive.
  7459.  
  7460.  
  7461. Function: DISKFREE
  7462. --------------------------------------------------------------------------
  7463. Syntax: n=DISKFREE
  7464.  
  7465. The opposite of DISKUSED, DISKFREE returns the number of bytes free
  7466. on the disk.  This function would be very useful, for example, in a
  7467. program that needed to save information to disk.  You would be able
  7468. to first determine if the specified SAVE disk had sufficient space.
  7469.  
  7470.  
  7471. Function: DISKBLOCKS
  7472. --------------------------------------------------------------------------
  7473. Syntax: n=DISKBLOCKS
  7474.  
  7475. This function returns the number of bytes each block on a disk uses,
  7476. making it possible to convert the byte-values of the above functions
  7477. to number of blocks.
  7478.  
  7479.  
  7480.                                  BUM7 MAIN DOC
  7481.  
  7482.                         Updates and Fixes to Blitz2 v1.9
  7483.  
  7484.  
  7485.  NEW COMMANDS           
  7486.  NEW LIBRARY'S INCLUDED 
  7487.  
  7488.  
  7489. Stability
  7490. --------------------------------------------------------------------------
  7491. Several improvements have been made to the stability of Blitz2 programs.
  7492. First up all string commands have been fixed to both work properly with
  7493. the null-termination system introduced in v.18 (our apologies here) and
  7494. error checking has been added. No longer will system crashes be caused
  7495. with illegal size parameters in mid$() etc.
  7496.  
  7497. Also, the ASMEND command has been added. Using assembler in statements
  7498. and functions use to require the use of UNLK A4 and RTS. This system
  7499. did not work properly when runtime errors were enabled. A fullproof
  7500. method is now available, simply use the ASMEND command in place of any
  7501. RTS commands. Blitz2 will look after the unlinking of A4, allow for
  7502. runtime errors and then do an RTS. Finally my darts demo runs with
  7503. runtime errors enabels (yipeeee!).
  7504.  
  7505. And finally, runtime error checking has been added for square bracket
  7506. arrays. Yup, out of range checking has been incorporated for those of
  7507. us whose first guess at why our programs were crashing was to go through
  7508. and check such usage manually. This with the new string checking and the
  7509. sexy new debugger should return a few people to using Blitz2's runtime
  7510. debugging features. Thanks to all those and their abuse for helping us
  7511. get these problems resolved.
  7512.  
  7513. Debugging
  7514. --------------------------------------------------------------------------
  7515. The debugger is now a separate program that is launched by Blitz2 when a
  7516. prgram is run (runtime errors enabled of course).
  7517.  
  7518. The gadgets in the window allow the programmer access to the standard
  7519. debugging features. CtrlAltC can still be used to halt programs, 
  7520. especially those using Slices and Displays in Blitz mode.
  7521.  
  7522. By increasing the size of the window the program listing can be viewed.
  7523.  
  7524. A PANIC! button has also been introduced once a program is launched from
  7525. the editor. Yup, programs are now launched not run so those into weird
  7526. system crashes may be able to return to Ted leaving their programs 
  7527. disabled in memory. A REBOOT button may have been more useful...
  7528.  
  7529. The source code for the default debugger is included in the acidlibsrc
  7530. directory of the libsdev archive. It is extremely well documented by
  7531. Mark so those wanting to extend the functionality of the system are
  7532. most welcome. Serial port support for using a remote terminal would
  7533. be very nice.
  7534.  
  7535. Interupts and BlitzKeys
  7536. --------------------------------------------------------------------------
  7537. BlitzKeys, BlitzKeys, BlitzKeys. A common profanity used by those of us
  7538. use to keyboard lock ups in keyboard based Blitz games (especially
  7539. SkidMarks). Well no more!
  7540.  
  7541. Blitz now leaves Amiga interupts enabled in Blitz mode. This means that
  7542. not only is the system keyboard interupt still running (thank the lord)
  7543. but any SetInts initiated in Amiga mode will continue.
  7544.  
  7545. Other advantages are that Blitz mode is now more acceptable to the CD32
  7546. environment and RawStatus can be used in Amiga mode for keyboard games
  7547. not wanting to run in Windows (yuck).
  7548.  
  7549. Blitzkeys On now does a bit of a "BlitzkeysInput" for one character inputs
  7550. only, any other inputs use the previously defined Input channel.
  7551.  
  7552. Blitzkeys Off no longer exists. BlitzRepeat has gone (no repeating keys).
  7553.  
  7554. Serial Stuff
  7555. --------------------------------------------------------------------------
  7556. Peter Tavinor has upgraded the Serial Library. ReadSerial now return a
  7557. word (read unsigned byte) so chr$(255) is acceptable. WriteSerialString
  7558. includes flags for DoIO and True String (not null terminated). ReadSerial
  7559. has a new flag "WaitForChar"
  7560.  
  7561. GadTools
  7562. --------------------------------------------------------------------------
  7563. The GTPalette has had several default tags removed as they crashed under
  7564. 2.0 (yeh, great, just what tags are suppose to avoid). AttachGTList had
  7565. a minor problem in some situations (now fixed).
  7566.  
  7567. Another bug that has been found in GadTools under 2.0 is that GTLists
  7568. actually allocate gadget id's for internal use. Besides being completely
  7569. unethical (and fixed in 3.0) it means that programmers should use id
  7570. values of greater than 50 to avoid this system bug. Adding GTLists last
  7571. in your list should also work although their id's should be more than the
  7572. number of lines of text they should display (no I am not going to explain
  7573. further).
  7574.  
  7575. ScreensLib
  7576. --------------------------------------------------------------------------
  7577. The Screen command now rounds the width up to the nearest multiple of 16
  7578. rather than causing the error "Screen Width Must be a multiple of 16".
  7579. Common sense I think.
  7580.  
  7581. ValLib
  7582. --------------------------------------------------------------------------
  7583. Val() now accepts hex and binary strings (preceeded by "$" and "%" of 
  7584. course.) Because Val() returns a float it should not be used to evaluate 
  7585. 32 bit integers (longs).
  7586.  
  7587. Display Library
  7588. --------------------------------------------------------------------------
  7589. A quick version of the InitCoplist command has been included which 
  7590. calculates the number of colours, sprites and size depending on just the 
  7591. type parameter.
  7592.  
  7593. As promised the Display library now sports new commands for palette 
  7594. effects and so forth. There are two varieties of copper based commands, 
  7595. the first allows the user to insert a new palette or copperstring at a 
  7596. certain line of the display, the other allows control of each and every 
  7597. line of the display.
  7598.  
  7599. For line based effects a negative value should be used in combination
  7600. with the numcustoms parameter of the InitCopList command. Color splits,
  7601. bitmap scrolling, scan doubling/trebling/quadrupling and custom copper
  7602. strings can now be acheived on a line by line basis.
  7603.  
  7604.  
  7605. Palette Library.
  7606. --------------------------------------------------------------------------
  7607. A number of commands have been added to the Palette library for use mainly
  7608. with the display library. Fades and Colour cycling can now be performed on
  7609. palette objects themselves (rather than on screens and slices) and hence
  7610. can be used in conjunction with the DisplayPalette command.
  7611.  
  7612.  
  7613. Banks and Decoding.
  7614. --------------------------------------------------------------------------
  7615. Decode commands have been added to allow programmers to both include 
  7616. shapes, sounds, palettes, music and ILBM's (IFF bitmaps) in their programs 
  7617. or from preloaded files (mainly using the LoadBank command or unpacking 
  7618. type commands).
  7619.  
  7620. To include such files in the program the incbin command is used. 
  7621. Typically a list of included files will be situated at the bottom of the 
  7622. listing (with and End statement just above to be safe). Each IncBin will 
  7623. be preceeded by a label and the ?label syntax would be used to pass the 
  7624. location of each included file to the appropriate Decode command at the 
  7625. top of the program.
  7626.  
  7627. Those unhappy with the slow but memory unhungry LoadBitMap command can 
  7628. take advantage of the fast but memory hungry method of loading iff/ilbm 
  7629. files with the code listed in the DecodeILBM command description.
  7630.  
  7631. Argslib fixes
  7632. --------------------------------------------------------------------------
  7633. This library processes arguments passed to it.  A few fixes have mainly
  7634. been made over the old one.
  7635.  
  7636. 1)  Quoted arguments count as one argument.  EG "One arg"  will give your
  7637.     program both words as one argument, not 2.
  7638.  
  7639. 2)  Mulitple workbench arguments are allowed now.
  7640.  
  7641.  
  7642. If you are to use workbench arg handling, you MUST have WBSTARTUP at the 
  7643. top of your program!!
  7644.  
  7645.  
  7646.  
  7647.                Here are all the new library's included with BUM7:
  7648.  
  7649.                   AARONSICONLIB         RICOMMODITIESLIB   
  7650.                   ELMORELIBS            RIENCRYPTLIB       
  7651.                   ELMOREINCLIB          RIFXLIB             
  7652.                   FUZZIESREQLIB         RIGFXLIB            
  7653.                   NEILSCIATRACKERLIB    RIPACKLIB          
  7654.                   NEILSPROGRESSLIB      RIREQLIB           
  7655.                   NEILSREQTOOLSLIB      RITOOLTYPESLIB         
  7656.                   RIAMOSFUNCLIB         RITRACKDISKLIB        
  7657.                   RIANIMLIB             RIZONEJOYLIB           
  7658.                   RIAPPLIB/WBLIB        ROMULUSLIBS                 
  7659.  
  7660.  
  7661.  
  7662.  
  7663. Look for these commands in:  CRUNCHLIB    
  7664.                  PRINTERLIB   
  7665.                              REQUESTERLIB 
  7666.                              LOCALE LIB   
  7667.                              CONSOLE LIB  
  7668.  
  7669.  
  7670.  
  7671. Library Name: riencryptlib #55
  7672. Authors     : ReflectiveImages, 17 Mayles Road, Southsea, Portsmouth, 
  7673.               Hampshire, UK PO4 8NP
  7674. OverView    : Another Reflective Images Library, good for war games?
  7675.  
  7676.  
  7677.                                  Authors Docs:
  7678.  
  7679.                                 RIEncryptLibrary
  7680.  
  7681.                             Date sent: 26-AUG-1994 
  7682.  
  7683. --------------------------------------------------------------------------
  7684. You can have this little library if you like.  Sorry there are no full 
  7685. docs in the archive - the lib was done in a hurry for someone.  It 
  7686. performs Enigma compression and is very cute ;-).
  7687. The archive contains the source code for the library.  I'm sure it 
  7688. wouldn't take you a second to have a look at it ;-).
  7689.  
  7690. Commands in the library:
  7691.  
  7692.   Encrypt memadr,len[,wheel1,wheel2,wheel3]
  7693.  
  7694. This will encrypt a block of memory starting at the address and running 
  7695. through to addresslength-1.  The optional wheel parameters allow you to
  7696. specify the start positions of the three wheels.  If you leave these out
  7697. then the wheels' start positions will be randomised.
  7698.  
  7699.   GetWheel n
  7700.  
  7701. This will tell you the position that wheel n stopped at after encrypting 
  7702. a file.  n can range from 1 to 3 - YOU MUST REMEMBER THESE POSITIONS
  7703. IF YOU WANT TO DECRYPT THE FILE (at the moment at least).
  7704.  
  7705.   Decrypt memadr,len,wheel1,wheel2,wheel3
  7706.  
  7707. Same Encrypt except that it does the opposite and the wheel positions ARE 
  7708. NOT OPTIONAL.  The positions should be the ones you wrote down after 
  7709. encrypting the file.  I may, in future, change it so that you can also
  7710. specify the start wheel positions instead of the end ones (shouldn't be 
  7711. tooooo hard ;-)).
  7712.  
  7713. Oh well, have a look and tell us what you think............
  7714.  
  7715.  
  7716.  
  7717. Library:  neilsreqtoolslib #54
  7718. Author:   Neil O'Rourke, 6 Victoria St, TAMWORTH, NSW 2340, AUSTRALIA
  7719. Overview: Access to the ReqTools library.
  7720.  
  7721.  
  7722.  RTEZREQUEST                   RTEZGETSTRING              
  7723.  RTEZFLAGSREQUEST              RTLOCKWINDOW               
  7724.  RTEZFONTREQUEST               RTUNLOCKWINDOW             
  7725.  RTEZSCREENMODEREQUEST         RTVERSION                  
  7726.  RTEZPALETTEREQUEST            RTREVISION                 
  7727.  RTEZLOADFILE                  ISREQTOOLSACTIVE           
  7728.  RTEZSAVEFILE                  RTASYNCREQUEST             
  7729.  RTEZPATHREQUEST               RTCHECKASYNCREQUEST        
  7730.  RTEZMULTILOADFILE             RTENDASYNCREQUEST          
  7731.  RTEZRNEXTPATHENTRY            RTASYNCPALETTEREQUEST      
  7732.  RTEZSETDEFAULTDIRECTORY       RTCHECKASYNCPALETTEREQUEST 
  7733.  RTEZSETPATTERN                RTENDASYNCPALETTEREQUEST   
  7734.  RTEZFREEPATTERN               RTREQUEST                  
  7735.  RTEZGETLONG                   RTFILEREQUEST              
  7736.  RTEZGETLONGRANGE            
  7737.  
  7738.  
  7739.                              Author's Documentation
  7740.                                ReqToolslib V1.70b
  7741.  
  7742.                                  Neil O'Rourke
  7743.  
  7744.                                 ** BETA FOUR **
  7745.  
  7746.           This is an implementation of Nico Franco's ReqTools library.
  7747.  
  7748. There are two different implementations of each function, a simple one
  7749. (denoted by EZ (pronounced E-Zee) in the command name),  and a complex 
  7750. one. The simple implementation has bog standard requesters that the 
  7751. programmer has little (if any) control over.  The purpose of these is to 
  7752. get your programs working fast (or it could be that you don't need all the
  7753. fancy options that are available), with a minimum of setup for the 
  7754. requesters. That isn't to say the requesters aren't powerful; on the 
  7755. contrary, ReqTools requesters leave ASL requesters in the dust when it 
  7756. comes down to sheer power.
  7757.  
  7758. The more complex implementation requires you to build a TagList and supply
  7759. it to the requester.  This shouldn't really be needed, as all the EZ
  7760. requesters have a resonable set of defaults and options to avoid this.
  7761.  
  7762. All the ReqTools requesters attach themselves to the window that DOS 
  7763. errors are.  To do this, simply make your window the current window with 
  7764. Use Window WindowNum, then CatchDosErrs.  By default, the requesters will 
  7765. go to the Workbench.
  7766.  
  7767.  
  7768. Compatibility
  7769. ~~~~~~~~~~~~~
  7770. All ReqTools requesters, with the exception of the ScreenMode request, are
  7771. compatible with KickStart 1.3.
  7772.  
  7773. DO NOT CALL RTEZSCREENMODEREQUEST IF YOU ARE RUNNING 1.3!! THIS IS YOUR 
  7774. RESPONSIBILITY!
  7775.  
  7776.  
  7777. Future Directions
  7778. ~~~~~~~~~~~~~~~~~
  7779. The recent releases of ReqTools have included a preferences program to
  7780. control the behaviour of requesters.  This does not sit well with the
  7781. pre-programmed options that my interface code uses.  It could be that
  7782. future releases of ReqToolsLib will not set these, but this is early days
  7783. and only time and user feed-back will indicate the path to go.
  7784.  
  7785.  
  7786.  
  7787. The doc file was so much damaged that I could not convert it....If 
  7788. somebody has a good file, please send or mail it to me!
  7789.  
  7790.  
  7791. Function: RTEZRequest
  7792. --------------------------------------------------------------------------
  7793. Syntax  : result=RTEZRequest(Title$,BodyText$,GadgetText$ [,ReqPosition
  7794.                  [, DefaultResponse, Flags]])
  7795.  
  7796. Description:
  7797. Opens a simple requester in the center of your screen.  You can have 
  7798. multiple gadgets in Gadget$, seperate the by a bar (|).
  7799.  
  7800. To have multiple lines in your gadget, seperate them by a Chr$(10).
  7801.  
  7802. Title$ can be whatever you want.  If it is left blank, the title of the
  7803. calling window will be used.
  7804.  
  7805. The requester auto-adjusts its size to the length of the body text.
  7806.  
  7807. Also, the requester will block any input to the calling window, and if the
  7808. user selects that window he will see the usual wait pointer.
  7809.  
  7810. The requester returns the number of the gadget selected, gadget zero is 
  7811. the extreme right hand gadget (usually Cancel), and numbered from one 
  7812. starting from the left hand side of the requester.
  7813.  
  7814. The optional parameter ReqPos allows relative positioning of the 
  7815. requester. You can have the requester open up in the center of the screen
  7816. (the default position), or the center of the window, or the TopLeft corner 
  7817. of the screen or window.  The valid flags are:
  7818.  
  7819. #REQPOS_POINTER      =0  Relative to MousePointer
  7820. #REQPOS_CENTERWIN    =1  Center of window
  7821. #REQPOS_CENTERSCR    =2  Center of screen (default)
  7822. #REQPOS_TOPLEFTWIN   =3  TopLeft of the window
  7823. #REQPOS_TOPLEFTSCR   =4  TopLeft of the screen (Amiga default)
  7824.  
  7825. There are two further options:
  7826.  
  7827. DefaultResponse allows you to change what gadget is selected when the
  7828. Return key is hit, and this is by default the left hand gadget (1)
  7829.  
  7830. Flags controls a few other items in the requester.
  7831. #EZREQB_NORETURNKEY  =1   Turns off the return key as positive response
  7832. #EZREQB_LAMIGAQUAL   =2   Keyboard shortcuts are limited to LA-V and LA-B
  7833. #EZREQB_CENTERTEXT   =4   Centers the text in the requester.
  7834.  
  7835. You can make keyboard shortcuts for the gadgets by placing an underscore
  7836. character '_' before the character you wish to have as the shortcut, for
  7837. example your "Ok" gadget could be defined as "_Ok", and Right Amiga-O 
  7838. would then satisfy the requester.
  7839.  
  7840.  
  7841. Function: RTEZFlagsRequest
  7842. --------------------------------------------------------------------------
  7843. Syntax  : result=RTEZFlagsRequest(Title$,BodyText$,GadgetText$,
  7844.                  IDCMPFlags[,ReqPos])
  7845.  
  7846.  
  7847. Description:
  7848. This requester is similar to the standard RTEZRequest, but it can also be
  7849. satisfied by an IDCMP flag (eg DiskInserted).  Either the gadget number or
  7850. the IDCMP flag will be returned in result.
  7851.  
  7852. This requester also supports no gadgets, by supplying "" as the Gadget
  7853. Text$. Since the window is locked, the user cannot proceed until the 
  7854. request is satisfied.  Use this at your own peril!  This requester can 
  7855. force the user to take an action he may not want to, if you don't supply 
  7856. any gadgets.  Think, have second thoughts, and then think some more.  
  7857. With enough thought, you *will* come to the conclusion that the user 
  7858. needs at least one gadget.
  7859.  
  7860. The ReqPosition flag is also available for this requester, as is the
  7861. keyboard shortcuts.
  7862.  
  7863.  
  7864. Function: RTEZFontRequest
  7865. --------------------------------------------------------------------------
  7866. Syntax  : *MyFont.TextAttr=RTEZFontRequest(Title$)
  7867.  
  7868. Description:
  7869. Brings up the Font requester, and returns a pointer to a TextAttr
  7870. structure.
  7871.  
  7872. The Font requester has had a total rewrite for the V1.7 release of
  7873. ReqToolsLib.  Using it is just the same, but it now returns a saner
  7874. structure.
  7875.  
  7876. The structure is defined:
  7877.  
  7878. NewType.TA
  7879.   Name.s
  7880.   YSize.w
  7881.   Style.b
  7882.   Flags.b
  7883. End Newtype
  7884.  
  7885.  
  7886. Function: RTEZScreenModeRequest
  7887. --------------------------------------------------------------------------
  7888. Syntax  : *MyScreenMode =RTEZScreenModeRequest(Title$ [,DisplayFlags])
  7889.  
  7890. Description:
  7891. Returns a pointer to the following structure:
  7892.  
  7893. NEWTYPE.MyScreenMode
  7894.   DisplayID.l
  7895.   DisplayWidth.w
  7896.   DisplayHeight.w
  7897.   DisplayDepth.w
  7898.   OverscanType.w
  7899.   AutoScroll.l
  7900. End NEWTYPE
  7901.  
  7902. The DisplayFlags field allows you to have control over what options you
  7903. offer the user.  By default, the requester has a resonable set of options,
  7904. but you may wish to add too (or subtract from) these.
  7905.  
  7906. Allowable flags are:
  7907. #SCREQF_OVERSCANGAD  -    Add an overscan cycle gadget to the requester.  
  7908.             After the requester returns you may read the 
  7909.             overscan type in '\OverscanType'  If this is 0 no 
  7910.             overscan is selected
  7911.             (Regular Size), if non-zero it holds one of the
  7912.             OSCAN_... values defined in the include file 
  7913.             'intuition /screens.[h|i]'.
  7914. #SCREQF_AUTOSCROLLGAD-    Add an autoscroll checkbox gadget to the requester.
  7915.             After the requester returns read '\AutoScroll' to 
  7916.             see if the user prefers autoscroll to be on or off.
  7917. #SCREQF_SIZEGADS     -    Add width and height gadgets to the requester.  If
  7918.             you do not add these gadgets the width and height 
  7919.             returned will be the default width and height for 
  7920.             the selected overscan type.
  7921. #SCREQF_DEPTHGAD     -    Add a depth slider gadget to the requester.  If you
  7922.             do not add a depth gadget, the depth returned will 
  7923.             be the maximum depth this mode can be opened in.
  7924. #SCREQF_NONSTDMODES  -    Include all modes. Unless this flag is set
  7925.             RTEZScreenModeRequest() will exclude nonstandard 
  7926.             modes. Nonstandard modes are presently HAM and EHB 
  7927.             (ExtraHalfBrite). So unless you are picking a mode 
  7928.             to do some rendering in leave this flag unset.  
  7929.             Without this flag set the mode returned will be a 
  7930.             normal bitplaned mode.
  7931. #SCREQF_GUIMODES     -    Set this flag if you are getting a screen mode to
  7932.             open a user interface screen in.  The modes shown 
  7933.             will be standard modes with a high enough 
  7934.             resolution (minumum 640 pixels).  If this flag is 
  7935.             set the SCREQF_NONSTDMODES flag is ignored.
  7936.  
  7937. Do not attempt to call this requester under WB1.3.
  7938.  
  7939.  
  7940. Function: RTEZPaletteRequest
  7941. --------------------------------------------------------------------------
  7942. Syntax  : SelectedColour.w=RTEZPaletteRequest(Title$,FirstColour)
  7943.  
  7944. Description:
  7945. Brings up the Palette requester.  Returns the last colour the user
  7946. selected, or -1 if the user hit cancel.  If the user changed the colours,
  7947. they are reflected in the viewport that the window is attached to.
  7948.  
  7949.  
  7950. Function: RTEZLoadFile
  7951. --------------------------------------------------------------------------
  7952. Syntax  : name$=RTEZLoadFile(Title$,FileName$)
  7953.  
  7954. Description:
  7955. This brings up the standard file requester.  The directories are buffered,
  7956. so it doesn't have to reload the directory each time it is called.  Note 
  7957. that FileName$ must be at least 108 characters long (use the MaxLen 
  7958. function of this).
  7959.  
  7960. Note that by default, pattern matching is not enabled.  If you want to
  7961. match a particular pattern, use the RTEZSetPattern command described below.
  7962.  
  7963. Also, the file name isn't copied to FileName$.  You can have a default
  7964. file name by writing to FileName$, but this will be cleared after the call
  7965. finishes.  This is also true of the SaveFile requester.
  7966.  
  7967.  
  7968. Function: RTEZSaveFile
  7969. --------------------------------------------------------------------------
  7970. Syntax  : name$=RTEZSaveFile(Title$,FileName$)
  7971.  
  7972. Description:
  7973. A seperate requester, the SaveFile requester is different from the 
  7974. LoadFile requester in a number of ways.  First, it has a seperate buffer 
  7975. from the LoadFile requester.  Second, the OK text is changed to Save. 
  7976. Third, the user cannot double-click a file to select it, to prevent 
  7977. accidental deletions.  Finally, if the user types in a non-existent 
  7978. directory, he will be asked if he would like that directory created.
  7979.  
  7980. FileName$ must be at least 108 bytes long as well.
  7981.  
  7982. Note that by default, pattern matching is not enabled.  If you want to
  7983. match a particular pattern, use the RTEZSetPattern command described below.
  7984.  
  7985.  
  7986. Function: RTEZPathRequest
  7987. --------------------------------------------------------------------------
  7988. Syntax  : name$=RTEZPathRequest(Title$)
  7989.  
  7990. Description:
  7991. Prompts the user to select a path.  This is also a seperate requester to
  7992. the LoadFile and SaveFile requesters, and maintains its own directory list.
  7993.  
  7994.  
  7995. Function: RTEZMultiLoadFile
  7996. --------------------------------------------------------------------------
  7997. Syntax  : ret.l=RTEZMultiLoadFile(Title$)
  7998.  
  7999. Description:
  8000. Allows the user to select multiple files for loading (this makes no sense
  8001. for saving).  ret is either True for a list having been selected, or False
  8002. if the user cancelled.
  8003.  
  8004. If you call RTEZMultiLoadFile, any previous FileList that was loaded is
  8005. deleted, even if the user cancels the requester.
  8006.  
  8007.  
  8008. Function: RTNextPathEntry
  8009. --------------------------------------------------------------------------
  8010. Syntax  : name$=RTNextPathEntry
  8011.  
  8012. Description:
  8013. This function returns the next file from a RTEZMultiLoadFile call, or a
  8014. null string is there is no entry, so you can safely loop about until an
  8015. empty string is returned.
  8016.  
  8017.  
  8018. Statement: RTEZSetDefaultDirectory
  8019. --------------------------------------------------------------------------
  8020. Syntax   : RTEZSetDefaultDirectory Requester#,Directory$
  8021.  
  8022. Description:
  8023. This can be used to set a default directory for the user. Directory$ is
  8024. the default path, and Requester# is one of the following:
  8025. 0 - EZLoadFile
  8026. 1 - EZSaveFile
  8027. 2 - EZPathRequest
  8028. 3 - EZMultiLoadFile
  8029.  
  8030.  
  8031. Statement: RTEZSetPattern
  8032. --------------------------------------------------------------------------
  8033. Syntax   : RTEZSetPattern Requester#,Pattern$
  8034.  
  8035. Description:
  8036. Enables and sets the pattern matching in LoadFile and SaveFile requesters.
  8037. Valid requesters are:
  8038. 0 - EZLoadFile
  8039. 1 - EZSaveFile
  8040. 3 - EZMultiLoadFile
  8041.  
  8042.  
  8043. Statement: RTEZFreePattern
  8044. --------------------------------------------------------------------------
  8045. Syntax   : RTEZFreePattern Requester#
  8046.  
  8047. Description:
  8048. Turns off pattern matching in the requester.  Valid requester numbers are:
  8049.  
  8050. 0 - EZLoadFile
  8051. 1 - EZSaveFile
  8052. 3 - EZMultiLoadFile
  8053.  
  8054.  
  8055. Function: RTEZGetLong
  8056. --------------------------------------------------------------------------
  8057. Syntax  : result.l=RTEZGetLong(Title$,BodyText$ [,DefaultValue])
  8058.  
  8059. Description:
  8060. This prompts the user for a number.  BodyText$ can be formatted with
  8061. chr$(10) if needed.  DefaultValue can be supplied to suggest a value to 
  8062. the user.
  8063.  
  8064.  
  8065. Function: RTEZGetLongRange
  8066. --------------------------------------------------------------------------
  8067. Syntax  : result.l=RTEZGetLongRange(Title$,BodyText$,Min.l,Max.l 
  8068.                    [,DefaultValue])
  8069.  
  8070. Description:
  8071. Like RTEZGetLong, but this imposes an inclusive minimum and maximum on the
  8072. number entered.  Again, DefaultValue can be used to suggest a value to the
  8073. user.
  8074.  
  8075.  
  8076. Function: RTEZGetString
  8077. --------------------------------------------------------------------------
  8078. Syntax  : returned$=RTEZGetString(Title$,BodyText$,MaxChars 
  8079.           [,DefaultString])
  8080.  
  8081. Description:
  8082. Prompts the user to enter a string (which can be up to MaxChars in length).
  8083. As usual, you can format the BodyText$ with chr$(10) and supply a default
  8084. string.  If you do supply one, then make sure that the length of the string
  8085. is less than MaxChars, otherwise you could corrupt innocent memory.
  8086.  
  8087.  
  8088. Function: RTLockWindow
  8089. --------------------------------------------------------------------------
  8090. Syntax  : WinLock=RTLockWindow(Window#)
  8091.  
  8092. Description:
  8093. This locks the numbered window, blocks all input to that window except
  8094. depth arranging (and the Zip gadget, under 2.0), and put up the standard
  8095. wait pointer.  If you have some utility to make the hands spin or something
  8096. like that, then that happens as well.  WinLock must be saved!
  8097.  
  8098.  
  8099. Statement: RTUnlockWindow
  8100. --------------------------------------------------------------------------
  8101. Syntax   : RTUnlockWindow Window#,WinLock
  8102.  
  8103. Description:
  8104. Unlocks the window that you locked with RTLockWindow.
  8105.  
  8106.  
  8107. Functions: RTVersion and RTRevision
  8108. --------------------------------------------------------------------------
  8109. Syntax   : ver=RTVersion and ver=RTRevision
  8110.  
  8111. Description:
  8112. Both these functions return the version number and revision number of the
  8113. ReqTools library that this code interfaces to.
  8114.  
  8115. Of no real use at the moment, but future developments in ReqTools may
  8116. require a minimum library version to work.  ReqToolsLib will always open
  8117. whatever ReqTools are available.
  8118.  
  8119.  
  8120. Function: IsReqToolsActive
  8121. --------------------------------------------------------------------------
  8122. Syntax  : result=IsReqToolsActive
  8123.  
  8124. Description:
  8125. Returns True if ReqTools was able to initialise, and False if it wasn't (eg
  8126. not available).
  8127.  
  8128.  
  8129. Function: RTASyncRequest
  8130. --------------------------------------------------------------------------
  8131. Syntax  : ret.l=RTASyncRequest(Title$,BodyText$,GadgetText$)
  8132.  
  8133. Description:
  8134. This function puts up a request, locks the window and returns immediately.
  8135. If the requester couldn't be put up, ret is False.  The program is now free
  8136. to continue, but the user can have the option of aborting a lengthy
  8137. operation if required.
  8138.  
  8139. Important Note: Do not attempt to have two asyncronous requesters up.
  8140.  
  8141. Note: As of V1.41b, RTASyncRequest uses the current window for the
  8142. requester.
  8143.  
  8144.  
  8145. Function: RTCheckASyncRequest
  8146. --------------------------------------------------------------------------
  8147. Syntax  : ret.l=RTCheckASyncRequest
  8148.  
  8149. Description:
  8150. Checks the status of the asyncronous requester, and returns True if it is
  8151. still up.
  8152.  
  8153.  
  8154. Statement: RTEndASyncRequest
  8155. --------------------------------------------------------------------------
  8156. Syntax   : RTEndASyncRequest
  8157.  
  8158. Description:
  8159. Ends the asyncronous request, under program control, and unlocks the
  8160. calling window.
  8161.  
  8162. NOTE:  Do not call this finction if the user has hit the gadget in the
  8163. request!  The requester automatically frees its self.
  8164.  
  8165.  
  8166. These three commands require a demonstration to illustrate:
  8167.  
  8168. NoCli:WBStartup
  8169. WbToScreen 0
  8170. Window 0,10,10,100,100,$8|$1000|2|4,"RTTest window",2,1
  8171. CatchDosErrs
  8172. ret.l=RTASyncRequest("Hi There!","Please Wait...","Cancel")
  8173.  
  8174. If ret  ;The requester opened OK
  8175.   For x.w=10 To 1 Step -1
  8176.     WLocate 0,10
  8177.     NPrint "Seconds:",x
  8178.     VWait(50)
  8179.     ret1.l=RTCheckASyncRequest ;Is the requester still up?
  8180.     If NOT ret1 ;No, so end this processing
  8181.       Pop If:Pop For:Pop If
  8182.       Goto cancelled
  8183.     EndIf
  8184.   Next x
  8185.   RTEndASyncRequest ;Normal finish
  8186. EndIf
  8187. End
  8188.  
  8189. cancelled:
  8190. a.l=RTEZRequest("Oi!","You cancelled!?!","Sure Did")
  8191. End
  8192.  
  8193.  
  8194. Function: RTASyncPaletteRequest
  8195. --------------------------------------------------------------------------
  8196. Syntax  : ret.l=RTASyncPaletteRequest(Title$,FirstColour)
  8197.  
  8198. Description:
  8199. Similar to RTEZPaletteRequest, this command puts up a palette requester and
  8200. returns immediatly.  Note, however, that the calling window is NOT locked,
  8201. unlike all other ReqTools requesters.  This allows you to launch a seperate
  8202. palette requester and continue processing.
  8203.  
  8204.  
  8205. Function: RTCheckASyncPaletteRequest
  8206. --------------------------------------------------------------------------
  8207. Syntax  : ret.l=RTCheckASyncPaletteRequest
  8208.  
  8209. Description:
  8210. Returns True if the requester is still up, False if the user hit Ok or
  8211. Cancel.  NOTE: There is no way to detect exactly how the user exited the
  8212. command.
  8213.  
  8214.  
  8215. Statement: RTEndASyncPaletteRequest
  8216. --------------------------------------------------------------------------
  8217. Syntax   : RTEndASyncPaletteRequest
  8218.  
  8219. Description:
  8220. Closes the requester.
  8221.  
  8222. A short demonstration program to illustrate:
  8223.  
  8224. WbToScreen 0
  8225. Window 0,0,0,200,100,$40,"Hi there",2,1
  8226. CatchDosErrs
  8227.  
  8228. ret.l=RTASyncPaletteRequest("Play with these",1)
  8229.  
  8230. count.l=0
  8231. If ret
  8232.   While count<100
  8233.     count+1
  8234.     WLocate 0,0
  8235.     NPrint "Seconds:",count
  8236.     If NOT RTCheckASyncPaletteRequest Then Goto quit
  8237.     Delay_ 60
  8238.   Wend
  8239.   RTEndASyncPaletteRequest
  8240. EndIf
  8241.  
  8242. quit:
  8243. Free Window 0
  8244.  
  8245.  
  8246. Function: RTRequest
  8247. --------------------------------------------------------------------------
  8248. Syntax  : ret=RTRequest(BodyText$,GadgetText$,TagList)
  8249.  
  8250. Description:
  8251. This is the standard form of the ReqTools Requester.  You must supply the
  8252. tag list to control the requester.  The requester title, if not specified
  8253. in the tag list, will be "Information" if you have only one response
  8254. gadget, or "Request" if you have two or more responses.
  8255.  
  8256. If you don't supply a tag list, ReqTools will use its own defaults.
  8257.  
  8258. It is *your* responsibility to ensure the TagList is correctly set up.
  8259.  
  8260. Most of the tags of interest are included in RTEZRequest and
  8261. RTEZFlagsRequest as standard.
  8262.  
  8263. Acceptable tags are:
  8264.    #RT_Window       - *name.Window
  8265.                       Window that will be used to find the screen to put 
  8266.                       the requester on.
  8267.                       You *MUST* supply this if you are a task calling 
  8268.                       this function and not a process! This is because 
  8269.                       tasks don't have a pr_WindowPtr.
  8270.    #RT_IDCMPFlags   - (LONG)
  8271.                       Extra idcmp flags to return on.  If one these IDCMP
  8272.                       flags causes the requester to abort the return code
  8273.                       will equal the flag in question.
  8274.    #RT_ReqPos       - (LONG)
  8275.                       One of the following:
  8276.                       #REQPOS_POINTER    - requester appears where the 
  8277.                                            mouse pointer is (default).
  8278.                       #REQPOS_CENTERSCR  - requester is centered on the
  8279.                                            screen.
  8280.                       #REQPOS_CENTERWIN  - requester is centered in the
  8281.                                            window (only works if the
  8282.                                            pr_WindowPtr of your process is
  8283.                                            valid or if you use RT_Window).
  8284.                                            If RT_Window is NULL the
  8285.                                            requester will be centered on
  8286.                                            the screen.
  8287.                       #REQPOS_TOPLEFTSCR - requester appears at the top 
  8288.                                            left of the screen.
  8289.                       #REQPOS_TOPLEFTWIN - requester appears at the top 
  8290.                                            left of the window (only works
  8291.                                            if the pr_WindowPtr of your 
  8292.                                            process is valid or if you use 
  8293.                                            RT_Window).
  8294.                       The requester will always remain in the visible part
  8295.                       of the screen, so if you use the Workbench 2.0 
  8296.                       ScreenMode preferences editor to enlarge your 
  8297.                       Workbench screen and you scroll around, the 
  8298.                       requester will always appear in the part you can see.
  8299.                       REQPOS_CENTERSCR and REQPOS_TOPLEFTSCR also apply to
  8300.                       the visible part of the screen. So if you use one of
  8301.                       these the requester will be appear in the center or 
  8302.                       the top left off what you can see of the screen as 
  8303.                       opposed to the entire screen.
  8304.                       REQPOS_CENTERWIN and REQPOS_TOPLEFTWIN fall back to
  8305.                       REQPOS_CENTERSCR or REQPOS_TOPLEFTSCR respectively
  8306.                       when there is no parent window.  So you can safely 
  8307.                       use these without worrying about the existence of a 
  8308.                       window.
  8309.    #RT_LeftOffset   - (LONG)
  8310.                       Offset of left edge of requester relative to 
  8311.                       position specified with RT_ReqPos (does not offset 
  8312.                       the requester when RT_ReqPos is REQPOS_POINTER).
  8313.    #RT_TopOffset    - (LONG)
  8314.                       Offset of top edge of requester relative to position
  8315.                       specified with RT_ReqPos (does not offset the 
  8316.                       requester when RT_ReqPos is REQPOS_POINTER).
  8317.    #RT_PubScrName   - (*string)
  8318.                       Name of public screen requester should appear on. 
  8319.                       When this tag is used the RT_Window tag will be  
  8320.                       ignored.
  8321.                       If the public screen is not found the requester will
  8322.                       open on the default public screen.
  8323.                       Only works on Kickstart 2.0!  reqtools.library does
  8324.                       not check this, it is up to you *NOT* to use this 
  8325.                       tag on Kickstart 1.3 or below!
  8326.                       Note that the 1.3 version of reqtools.library also
  8327.                       understands and supports this tag (on 2.0).
  8328.    #RT_Screen       - (*name.Screen)
  8329.                       Address of screen to put requester on.  You should
  8330.                       never use this, use RT_Window or RT_PubScrName.
  8331.    #RT_ReqHandler   - (struct rtHandlerInfo **)
  8332.                       Using this tag you can start an "asynchronous"
  8333.                       requester. ti_TagData of the tag must hold the 
  8334.                       address of a pointer variable to a rtHandlerInfo 
  8335.                       structure.
  8336.                       The requester will initialize this pointer and will
  8337.                       return immediately after its normal initialization.
  8338.                       The return code will not be what you would normally
  8339.                       expect.  If the return code is _not_ equal to
  8340.                       CALL_HANDLER an error occurred and you should take
  8341.                       appropriate steps. If the return code was 
  8342.                       CALL_HANDLER everything went ok and the requester 
  8343.                       will still be up!
  8344.                       See the explanation for rtReqHandlerA() below for  
  8345.                       the following steps you have to take.
  8346.    #RT_WaitPointer  - (BOOL)
  8347.                       If this is TRUE the window calling the requester 
  8348.                       will get a standard wait pointer set while the 
  8349.                       requester is up. This will happen if you used the 
  8350.                       RT_Window tag or if your process's pr_WindowPtr is 
  8351.                       valid.  Note that after the requester has finished 
  8352.                       your window will be ClearPointer()-ed.  If you used
  8353.                       a custom pointer in your window you will have to 
  8354.                       re-set it, or not use the RT_WaitPointer tag and put
  8355.                       up a wait pointer yourself.
  8356.                       If your program requires ReqTools V38 it is advised 
  8357.                       you use RT_LockWindow instead.  Defaults to FALSE.
  8358.    #RT_LockWindow   - (BOOL) [V38]
  8359.                       If this is TRUE the window calling the requester 
  8360.                       will get locked.  It will no longer accept any user 
  8361.                       input and it will get standard wait pointer set.  
  8362.                       This will happen only if you used the RT_Window tag 
  8363.                       or if your process's pr_WindowPtr is valid.  
  8364.                       RT_LockWindow will restore a custom pointer if you 
  8365.                       have used one (unlike RT_WaitPointer).  So you do 
  8366.                       not have to worry about having to restore it  
  8367.                       yourself.  It is advised you use this tag as much as
  8368.                       possible. Defaults to FALSE.
  8369.    #RT_ScreenToFront - (BOOL) [V38]
  8370.                       Boolean indicating whether to pop the screen the
  8371.                       requester will appear on to the front. Default is 
  8372.                       TRUE.
  8373.    #RT_ShareIDCMP   - (BOOL) [V38]
  8374.                       Boolean indicating whether to share the IDCMP port 
  8375.                       of the parent window. Use this tag together with the
  8376.                       RT_Window tag to indicate the window to share IDCMP
  8377.                       with. Sharing the IDCMP port produces less overhead,
  8378.                       so it is advised you use this tag. Defaults to 
  8379.                       FALSE.
  8380.    #RT_Locale       - (struct Locale *) [V38]
  8381.                       Locale to determine what language to use for the
  8382.                       requester text.  If this tag is not used or its data
  8383.                       is NULL, the system's current default locale will be
  8384.                       used. Default NULL.
  8385.    #RT_IntuiMsgFunc - (struct Hook *) [V38]
  8386.                       The requester will call this hook for each IDCMP
  8387.                       message it gets that doesn't belong to its window.
  8388.                       Only applies if you used the RT_ShareIDCMP tag to 
  8389.                       share the IDCMP port with the parent window.  
  8390.                       Parameters are as follows:
  8391.                         A0 - (struct Hook *) your hook
  8392.                         A2 - (struct rtReqInfo *) your requester info
  8393.                         A1 - (struct IntuiMessage *) the message
  8394.                       After you have finished examining the message and 
  8395.                       your hook returns, ReqTools will reply the message.  
  8396.                       So do not reply the message yourself!
  8397.    #RT_Underscore   - (char) [V38]
  8398.                       Indicates the symbol that precedes the character in
  8399.                       the gadget label to be underscored.  This is to 
  8400.                       define a keyboard shortcut for this gadget.  
  8401.                       Example: to define the key 'Q' as a keyboard 
  8402.                       shortcut for "Quit" and 'N' for "Oh, No!" you would 
  8403.                       use the tag RT_Underscore, '_' and pass as gadfmt 
  8404.                       "_Quit|Oh, _No!".  Do not use the symbol '%' as it 
  8405.                       is used for string formatting.  The
  8406.                       usual character to use is '_' like in the example.
  8407.                       IMPORTANT: the shortcuts defined using RT_Underscore
  8408.                       take precedence of the default shortcuts!  It is for
  8409.                       example not wise to use a 'N' for a positive 
  8410.                       response! Pick your shortcuts carefully!
  8411.    #RT_TextAttr     - (struct TextAttr *) [V38]
  8412.                       Use this font for the requester.  Default is to use
  8413.                       the screen font.  Note that the font must already be
  8414.                       opened by you.  ReqTools will call OpenFont() on 
  8415.                       this TextAttr, _not_ OpenDiskFont()!  If the font 
  8416.                       cannot be opened using OpenFont() the default screen
  8417.                       font will be used.
  8418.    #RTEZ_ReqTitle   - (char *)
  8419.                       Title of requester window, default is "Request" 
  8420.                       unless the requester has less than 2 responses, then
  8421.                       the default title is "Information".
  8422.    #RTEZ_Flags      - (ULONG)
  8423.                       Flags for rtEZRequestA():
  8424.                       #EZREQF_NORETURNKEY - turn off the RETURN key as
  8425.                                             shortcut for positive response.
  8426.                       #EZREQF_LAMIGAQUAL  - keyboard shortcuts are limited
  8427.                                             to Left Amiga 'V' and 'B', ESC
  8428.                                             and RETURN.
  8429.                       #EZREQF_CENTERTEXT  - centers each line of body text
  8430.                                             in the requester window. Useful
  8431.                                             for about requesters.
  8432.    #RTEZ_DefaultResponse - (ULONG)
  8433.                       Response value that will be returned when the user
  8434.                       presses the return key.  Will be ignored if the
  8435.                       EZREQF_NORETURNKEY flag is set.  The text for this
  8436.                       response will be printed in bold. Default is 1.
  8437.  
  8438.  
  8439.  
  8440. Function: RTFileRequest
  8441. --------------------------------------------------------------------------
  8442. Syntax  : name$=RTFileRequest(Title$,FileName$,TagList)
  8443.  
  8444. Description:
  8445. This is the standard ReqTools requester, and is seperate from the 
  8446. LoadFile, SaveFile and PathRequest requesters.  No setup is done, but the 
  8447. file name etc is returned as per the above requesters.
  8448.  
  8449. Most of the tags that you would set normally are included as standard in
  8450. the RTREZxFile requesters.
  8451.  
  8452. It is *your* responsibility to ensure that the TagList is correctly set 
  8453. up.
  8454.  
  8455. Acceptable tags are:
  8456.  
  8457.    #RT_Window          - see rtEZRequestA()
  8458.    #RT_ReqPos          - see rtEZRequestA()
  8459.    #RT_LeftOffset      - see rtEZRequestA()
  8460.    #RT_TopOffset       - see rtEZRequestA()
  8461.    #RT_PubScrName      - see rtEZRequestA()
  8462.    #RT_Screen          - see rtEZRequestA()
  8463.    #RT_ReqHandler      - see rtEZRequestA()
  8464.    #RT_WaitPointer     - see rtEZRequestA()
  8465.    #RT_LockWindow      - [V38] see rtEZRequestA()
  8466.    #RT_ScreenToFront   - [V38] see rtEZRequestA()
  8467.    #RT_ShareIDCMP      - [V38] see rtEZRequestA()
  8468.    #RT_Locale          - [V38] see rtEZRequestA()
  8469.    #RT_IntuiMsgFunc    - (struct Hook *) [V38]
  8470.                          The requester will call this hook for each IDCMP
  8471.                          message it gets that doesn't belong to its window.
  8472.                          Only applies if you used the RT_ShareIDCMP tag to
  8473.                          share the IDCMP port with the parent window.
  8474.                          Parameters are as follows:
  8475.                            A0 - (struct Hook *) your hook
  8476.                            A2 - (struct rtFileRequester *) your requester
  8477.                            A1 - (struct IntuiMessage *) the message
  8478.                          After you have finished examining the message and
  8479.                          your hook returns, ReqTools will reply the 
  8480.                          message. So do not reply the message yourself!
  8481.    #RT_Underscore      - (char) [V38]
  8482.                          Indicates the symbol that precedes the character
  8483.                          in a gadget's label to be underscored.  This will
  8484.                          also define the keyboard shortcut for this gadget.
  8485.                          Currently only needed for RTFI_OkText.  Usually 
  8486.                          set to '_'.
  8487.    #RT_DefaultFont     - (struct TextFont *)
  8488.                          This tag allows you to specify the font to be 
  8489.                          used in the requester when the screen font is
  8490.                          proportional. Default is GfxBase->DefaultFont.
  8491.    #RT_TextAttr        - (struct TextAttr *) [V38]
  8492.                          Use this font for the requester.  Must be a fixed
  8493.                          width font, _not_ a proportional one.  Default is 
  8494.                          to use the screen font or the default font (if 
  8495.                          the screen font is proportional).  Note that the 
  8496.                          font must already be opened by you.  ReqTools 
  8497.                          will call OpenFont() on this TextAttr, _not_ 
  8498.                          OpenDiskFont()!
  8499.                          If the font cannot be opened using OpenFont() or 
  8500.                          if the font is proportional the default screen 
  8501.                          font will be used (or the font set with 
  8502.                          RT_DefaultFont).
  8503.    #RTFI_Flags         - (ULONG)
  8504.                          Several flags:
  8505.                          #FREQF_NOBUFFER    - do _not_ use a buffer to
  8506.                                               remember directory contents
  8507.                                               for the next time the file
  8508.                                               requester is used.
  8509.                          #FREQF_MULTISELECT - allow multiple files to be
  8510.                                               selected. rtFileRequest() 
  8511.                                               will return a pointer to an
  8512.                                               rtFileList structure which
  8513.                                               will contain all selected
  8514.                                               files.  Use rtFreeFileList()
  8515.                                               to free the memory used by
  8516.                                               this file list.
  8517.                          #FREQF_SELECTDIRS  - set this flag if you wish to
  8518.                                               enable the selecting of dirs
  8519.                                               as well as files.  You *must*
  8520.                                               also set FREQF_MULTISELECT.
  8521.                                               Directories will be returned
  8522.                                               together with files in
  8523.                                               rtFileList, but with StrLen
  8524.                                               equal to -1.  If you need the
  8525.                                               length of the directory's 
  8526.                                               name use strlen().
  8527.                          #FREQF_SAVE        - Set this if you are using the
  8528.                                               requester to save or delete
  8529.                                               something.  Double-clicking
  8530.                                               will be disabled so it is
  8531.                                               harder to make a mistake and
  8532.                                               select the wrong file.  If 
  8533.                                               the user enters a non-
  8534.                                               existent directory in the 
  8535.                                               drawer string
  8536.                                               gadget, a requester will
  8537.                                               appear asking if the 
  8538.                                               directory should be created.
  8539.                          #FREQF_NOFILES     - Set this if you want to use
  8540.                                               the requester to allow the
  8541.                                               user to select a directory
  8542.                                               rather than a file.  Ideal 
  8543.                                               for getting a destination 
  8544.                                               dir. May be used with FREQF_
  8545.                                               MULTISELECT
  8546.                                               and FREQF_SELECTDIRS.
  8547.                          #FREQF_PATGAD      - When this is set a pattern
  8548.                                               gadget will be added to the
  8549.                                               requester.
  8550.    #RTFI_Height        - (ULONG)
  8551.                          Suggested height of file requester window.
  8552.    #RTFI_OkText        - (char *)
  8553.                          Replacement text for "Ok" gadget, max 6 chars  
  8554.                          long.
  8555.    #RTFI_VolumeRequest - (ULONG) [V38]
  8556.                          The presence of this tag turns the file requester
  8557.                          into a volume/assign disk requester.  This 
  8558.                          requester can be used to get a device name 
  8559.                          ("DF0:", "DH1:",..) or an assign ("C:", "FONTS:",
  8560.                          ...) from the user.
  8561.                          The result of this requester can be found in the
  8562.                          filereq->Dir field.  The volume can also be 
  8563.                          changed with rtChangeReqAttrA() and the RTFI_Dir 
  8564.                          tag.  
  8565.                          Note:
  8566.                          that the user may edit the disk/assign names, or
  8567.                          enter a new one.  Note also that the real device
  8568.                          name is returned, not the name of the volume in 
  8569.                          the device.  For example "DH1:", not "Hard1:".
  8570.                          The tag data (ULONG) is used to set following 
  8571.                          flags:
  8572.                          #VREQF_NOASSIGNS - Do not include the assigns in
  8573.                                             the list, only the real 
  8574.                                             devices.
  8575.                          #VREQF_NODISKS   - Do not include devices, just
  8576.                                             show the assigns.
  8577.                          #VREQF_ALLDISKS  - Show _all_ devices.  Default
  8578.                                             behavior is to show only those
  8579.                                             devices which have valid disks
  8580.                                             inserted into them.  So if you
  8581.                                             have no disk in drive DF0: it
  8582.                                             will not show up.  Set this 
  8583.                                             flag if you do want these 
  8584.                                             devices included.
  8585.                         NOTE: Do *NOT* use { RTFI_VolumeRequest, TRUE }!
  8586.                               You are then setting the VREQF_NOASSIGNS  
  8587.                               flag! Use { RTFI_VolumeRequest, 0 } for a 
  8588.                               normal volume requester.
  8589.                         NOTE: If you use the RTFI_FilterFunc described
  8590.                               below the third parameter will be a pointer
  8591.                               to a rtVolumeEntry structure rather than a
  8592.                               pointer to a FileInfoBlock structure!
  8593.                               Tech note: the DOS device list has been
  8594.                               unlocked, so it is safe to e.g. Lock() this
  8595.                               device and call Info() on this lock.
  8596.                         NOTE: A file requester structure allocated with
  8597.                               rtAllocRequest() should not be used for both
  8598.                               a file and a volume requester. Allocate two
  8599.                               requester structures if you need both a file
  8600.                               and a volume requester in your program!
  8601.    #RTFI_FilterFunc    - (struct Hook *) [V38]
  8602.                          Call this hook for each file in the directory 
  8603.                          being read (or for each entry in the volume 
  8604.                          requester).
  8605.                          Parameters are as follows:
  8606.                            A0 - (struct Hook *) your hook
  8607.                            A2 - (struct rtFileRequester *) your filereq
  8608.                            A1 - (struct FileInfoBlock *) fib of file OR
  8609.                                 (struct rtVolumeEntry *) device or assign
  8610.                                 in case of a volume requester.
  8611.                          If your hook returns TRUE the file will be 
  8612.                          accepted. If it returns FALSE the file will be 
  8613.                          skipped and will not appear in the requester.
  8614.                          IMPORTANT NOTE: If you change your hook's 
  8615.                                          behavior you _MUST_ purge the 
  8616.                                          requester's buffer (using rtFree
  8617.                                          ReqBuffer())!
  8618.                          IMPORTANT NOTE: When this callback hook is called
  8619.                                          from a volume requester the
  8620.                                          pr_WindowPtr of your process will
  8621.                                          be set to -1 so *no* DOS 
  8622.                                          requesters will appear when an 
  8623.                                          error occurs!
  8624.    #RTFI_AllowEmpty    - (BOOL) [V38]
  8625.                          If RTFI_AllowEmpty is TRUE an empty file string 
  8626.                          will also be accepted and returned.  Defaults to 
  8627.                          FALSE, meaning that if the user enters no 
  8628.                          filename the requester will be canceled.  You 
  8629.                          should use this tag as little as possible!
  8630.  
  8631.  
  8632.  
  8633. Library Name: fuzziesreqlib #53
  8634.  
  8635. Author: Peter Tavinor, 22 Tuhangi St, Kamo, Whangarei, New Zealand
  8636.  
  8637. Commands:
  8638.  
  8639.  COLOURREQUEST   
  8640.  CON_BASE        
  8641.  DOS_BASE        
  8642.  FILEFILTER      
  8643.  FILEREQSIZE     
  8644.  FILESTRUCTURE   
  8645.  GETSTRING$      
  8646.  GFX_BASE        
  8647.  INT_BASE        
  8648.  MAXSELECT$      
  8649.  NEXTFILE$       
  8650.  REQCOLOURS      
  8651.  REQFILEREQUEST$ 
  8652.  REQFONTSIZE     
  8653.  REQ_BASE        
  8654.  REX_BASE        
  8655.  TEXTREQUEST     
  8656.  TEXTTIMEOUT     
  8657.  
  8658. OverView:
  8659.   Not only has Peter Tavinor (King Fuzzy) kindly fixed up and added
  8660.   stuff to our own libraries (seriallib especially) he has also sent
  8661.   us this library which is one of three that take advantage of the
  8662.   ReqLibrary.
  8663.   Fuzzy has also cludged up Ted with hotkeys and stuff, if you
  8664.   want to get hold of this version I suggest writing to him
  8665.   at the above address. Anyway, sorry I couldn't fit more of
  8666.   his stuff in this issue.
  8667.  
  8668. Authors Docs:
  8669.  
  8670.  Req   Library  Ver 1.1 By King Fuzzy  No. 201
  8671.  
  8672.  $VER: Req Library extention Docs version 1.1 by King Fuzzy
  8673.  
  8674. The following commands are in the Reqlib library and they require the req.library
  8675. To get the Requests on a custom window use CatchDosErrs (see Reference Manual)
  8676.  
  8677.  
  8678. Function: ColourRequest
  8679. --------------------------------------------------------------------------
  8680. Syntax  : Colour=ColourRequest(Colour)
  8681.  
  8682. Description:
  8683. This function brings up a handy little palette and allows the user to 
  8684. select a colour using Colour as the default.
  8685.  
  8686. Example:
  8687.   c=ColourRequest(1)
  8688.  
  8689.  
  8690. Function: Con_Base
  8691. --------------------------------------------------------------------------
  8692. Syntax  : cl.l=Con_Base
  8693.  
  8694. This Returns pointer to Console.device. Used for jsr calls mainly rawkey 
  8695. to cookedkey 
  8696.  
  8697.  
  8698. Function: Dos_Base
  8699. --------------------------------------------------------------------------
  8700. Syntax  : dl.l=Dos_Base
  8701.  
  8702. This Returns pointer to Dos.Library used in jsr calls
  8703.  
  8704.  
  8705. Statement: FileFilter
  8706. --------------------------------------------------------------------------
  8707. Syntax   : FileFilter Show$,Hide$
  8708.  
  8709. This sets the Hide and Show filters in the req file requester
  8710.  
  8711. FileFilter "Req.*","*.Bak"
  8712.  
  8713. This will show all files starting with 'Req.' but not ones ending with 
  8714. '.Bak'
  8715.  
  8716.  
  8717. Statement: FileReqSize
  8718. --------------------------------------------------------------------------
  8719. Syntax   : FileReqSize Lines High,File Length,Device Length
  8720.  
  8721. Description:
  8722. This sets the size of the Req File Requester. The defaults are 8,16,10
  8723.  
  8724. FileReqSize 20,25,12
  8725.  
  8726.  
  8727. Function: FileStructure
  8728. --------------------------------------------------------------------------
  8729. Syntax  : Fs.l=FileStructure
  8730.  
  8731. Description:
  8732. Returns a pointer to the req file requester structure
  8733.  
  8734.  
  8735. Function: GetString$
  8736. --------------------------------------------------------------------------
  8737. Syntax  : String$=GetString$(Title$,Default$,Visable size,Max length)
  8738.  
  8739. Description:
  8740. This brings up a string requester allowing the user to enter a string
  8741. The maximum length and the visable length are set with Max length and 
  8742. Visable size The default string must have a maximum length of at least 
  8743. Max length Returns a null string if cancel is selected
  8744.  
  8745. MaxLen d$=40
  8746. s$=GetString$("Type something",d$,30,40)
  8747.  
  8748.  
  8749. Function: Gfx_Base
  8750. --------------------------------------------------------------------------
  8751. Syntax  : gl.l=Gfx_Base
  8752.  
  8753. Description:
  8754. This Returns pointer to Graphics.Library used in jsr calls
  8755.  
  8756.  
  8757. Function: Int_Base
  8758. ----------------------------------------------------------------------------
  8759. Syntax  : il.l=Int_Base
  8760.  
  8761. Description:
  8762. This Returns pointer to Intuition.Library used in jsr calls
  8763.  
  8764.  
  8765. Statement: MaxSelect$
  8766. --------------------------------------------------------------------------
  8767. Syntax   : Path$=MaxSelect$(Title$,File$,Path$,Flags,number of files)
  8768.                            
  8769. Select the number of files that can be selected with the extended selector
  8770. see ReqFile Requestor for more information
  8771.  
  8772.  
  8773. Function: NextFile$
  8774. --------------------------------------------------------------------------
  8775. Syntax  : f$=NextFile$
  8776.  
  8777. Description:         
  8778. Returns the next file in the extended file structure
  8779.  
  8780.  
  8781. Statement: ReqColours
  8782. --------------------------------------------------------------------------
  8783. Syntax   : ReqColours Text,Detail,Block[,File,Dir,Device[,GadText,GadBox,
  8784.                       StringName,StringBox,Frame]]
  8785.  
  8786. Description:
  8787. Text,Detail and Block are for both the req file requester and the text 
  8788. requester File,Dir,Device,GadText,GadBox,StringName,StringBox and Frame 
  8789. are only for the req file requester
  8790.  
  8791. Try changing the colours one at a time to see what they change
  8792.  
  8793. ReqColours 1,2,3
  8794. ReqColours 1,2,3,3,2,1
  8795. ReqColours 1,2,3,3,2,1,1,2,3,4,5
  8796.  
  8797.  
  8798. Function: ReqFileRequest$
  8799. --------------------------------------------------------------------------
  8800. Syntax:  selectedfile$=ReqFileRequest$(Title$,File$,Path$,Flags)
  8801.  
  8802. Yes it's another file/font requester, No it won't bring up the blitz 
  8803. requester if it fails the maximum length of File$ must be 32 and Path$ 
  8804. must be 132 The Flags are as follows (Clipped from reqbase.i)
  8805.  
  8806. FRQSHOWINFOB      EQU 0  =   1      ;Set this in Flags if you want .info files to show.  They default to hidden.
  8807. FRQEXTSELECTB     EQU 1  =   2      ;Set this in Flags if you want extended select.  Default is not.
  8808. FRQCACHINGB       EQU 2  =   4      ;Set this in Flags if you want directory caching.  Default is not.
  8809. FRQGETFONTSB      EQU 3  =   8      ;Set this in Flags if you want a font requester rather than a file requester.
  8810. FRQINFOGADGETB    EQU 4  =  16      ;Set this in Flags if you want a hide-info files gadget.
  8811. FRQHIDEWILDSB     EQU 5  =  32      ;Set this in Flags if you DON'T want 'show' and 'hide' string gadgets.
  8812. FRQABSOLUTEXYB    EQU 6  =  64      ;Use absolute x,y positions rather than centering on mouse.
  8813. FRQCACHEPURGEB    EQU 7  = 128      ;Purge the cache whenever the directory date stamp changes if this is set.
  8814. FRQNOHALFCACHEB   EQU 8  = 256      ;Don't cache a directory unless it is completely read in when this is set.
  8815. FRQNOSORTB        EQU 9  = 512      ;Set this in Flags if you DON'T want sorted directories.
  8816. FRQNODRAGB        EQU 10 =1024      ;Set this in Flags if you DON'T want a drag bar and depth gadgets.
  8817. FRQSAVINGB        EQU 11 =2048      ;Set this bit if you are selecting a file to save to.
  8818. FRQLOADINGB       EQU 12 =4096      ;Set this bit if you are selecting a file(s) to load from.
  8819.                                     ;These two bits (save and load) aren't currently used for
  8820.                                     ;anything, but they may be in the future, so you should
  8821.                                     ;remember to set them.  Also, these bits make it easier if
  8822.                                     ;somebody wants to customize the file requester for their
  8823.                                     ;machine.  They can make it behave differently for loading
  8824.                                     ;vs saving.
  8825. FRQDIRONLYB       EQU 13 =8192      ;Allow the user to select a directory, rather than a file.
  8826.  
  8827. Just add together what you want and use it. EG. 6 is Caching and extended 
  8828. select
  8829.  
  8830. Also see:  FILEREQSIZE   
  8831.            FILEFILTER    
  8832.            REQCOLOURS$   
  8833.            FILESTRUCTURE 
  8834.            MAXSELECT$    
  8835.            NEXTFILE$     
  8836.  
  8837. MaxLen fl$=32 : MaxLen dr$=132
  8838. f$=ReqFileRequest$("Select a file",fl$,dr$,4)
  8839.  
  8840. FRQEXTSELECTB is not used
  8841.  
  8842. Returns a null string if user aborts
  8843.  
  8844.  
  8845. Function: ReqFontSize
  8846. --------------------------------------------------------------------------
  8847. Syntax  : sz=ReqFontSize
  8848.  
  8849. This Returns the size of the last font selected with the font requester
  8850.  
  8851.  
  8852. Function: Req_Base
  8853. --------------------------------------------------------------------------
  8854. Syntax  : rl.l=Req_Base
  8855.  
  8856. This Returns pointer to Req.Library used in jsr calls
  8857.  
  8858.  
  8859. Function: Rex_Base
  8860. --------------------------------------------------------------------------
  8861. Syntax  : rxl.l=Rex_Base
  8862.  
  8863. This Returns pointer to RexxSys.Library I think, It says RexxSysBase in 
  8864. the req library docs
  8865.  
  8866.  
  8867. Function: TextRequest
  8868. --------------------------------------------------------------------------
  8869. Syntax  : Button=TextRequest(Text,Title,Left Text[,[Middle Text,]Right Text])
  8870.  
  8871. This brings up a text requester with Text as the message and Title in the 
  8872. titlebar It can have 1, 2 or 3 buttons to select from The requester's 
  8873. colours can be changed: See  REQCOLOURS 
  8874.  
  8875. Left button
  8876. Left and Right buttons
  8877. Left, Middle and Right buttons
  8878.  
  8879. The text in the buttons is determined by Left Text,Middle Text and Right 
  8880. Text
  8881.  
  8882. the value returned is
  8883. 1  left button
  8884. 2  middle button
  8885. 0  right button
  8886.  
  8887. Button=TextRequest("I am a simple requester","Blitz Prog","Left","Middle","Right")
  8888.  
  8889.  
  8890. Statement: TextTimeout
  8891. --------------------------------------------------------------------------
  8892. Syntax   : TextTimeout Timeout Seconds
  8893.  
  8894. Its surpose to set the timeout for the text requester but it don't work 
  8895. yet
  8896.  
  8897.  
  8898. Library Name: elmoreinclib #111
  8899. --------------------------------------------------------------------------
  8900. Author: Richard T Elmore, HeadSoft, 126 STATE ST. #20, 
  8901.         SPEARFISH, SD 57783, USA
  8902.  
  8903. OverView: 
  8904. This is a crippled version of a library which Richard has put a whole 
  8905. heap of time into. It basically allows you to include compressed object
  8906. data into your programs which you can unpack at your leisure. Please see 
  8907. the registration material at the bottom of this file if you like what 
  8908. you see. Demo, util and lh.library are in userlibprogs/elmore.
  8909.  
  8910. Commands:
  8911.  
  8912.  INCSOUND           INCNEXTSHAPE       FREEINCDATA  
  8913.  INCBITMAP          INCTEXT$           SAVEINCDATA  
  8914.  INCMOD             INCDATA      
  8915.  INCMED             INCSIZE      
  8916.  INCSHAPE           INCDATAABS     
  8917.  
  8918.  USING THE INCLUDE-UTIL PROGRAM 
  8919.  
  8920.                                  Author's Docs:
  8921.  
  8922.                             ABOUT INCLUDE.ELMORELIB
  8923.                            =========================
  8924.  
  8925.  
  8926. The Include library by Richard T. Elmore of HeadSoft Software enables
  8927. Blitz2 programmers to make stand-alone files that don't require special
  8928. directories, external IFF files, etc. to run.  To achieve this in the most
  8929. efficient manner possible, the incredible efficiency and speed of the
  8930. LH.Library is used (in the INCLUDE-UTIL tool, which is freely 
  8931. distributeable.)
  8932.  
  8933. At present, the Include library supports Bitmaps, (up to 8 bitplanes!)
  8934. sound effects, MED music modules, IFF brushes for Blitz2 SHAPES, Blitz2 
  8935. SHAPES-FILES for multiple shapes, (as created by the SAVESHAPES command
  8936. or with the SHAPESMAKER utility) entire ASCII text files, or raw binary 
  8937. data which gives the advanced programmer the ability to include other 
  8938. object types or other data such as executeable programs, variable arrays 
  8939. for cosine tables, etc.
  8940.  
  8941. The library was designed with Blitz2's INCBIN compiler directive, but may
  8942. also be used with data loaded with READMEM or similar commands, to 
  8943. conserve disk space when you don't mind having external files, not to 
  8944. mention they will be made next to impossible to "rip" by anyone without 
  8945. the Include Library!
  8946.  
  8947.  
  8948. NOTE:  Your executeables do NOT require the "lh.library" to run...  They
  8949. will have their own self-contained decrunching routine (which is much 
  8950. faster than the crunching routine in lh.library!)
  8951.  
  8952.  
  8953.                          USING THE INCLUDE-UTIL PROGRAM
  8954.                         ================================
  8955.  
  8956. In order to include the above-mentioned data in your Blitz2 executeables,
  8957. the original data files must be converted and packed so that the resulting
  8958. runtime program consumes the least memory possible.  This also allows the 
  8959. data to be stored in public or "fast" memory, not just CHIP ram. The 
  8960. INCLUDE-UTIL program is supplied with the library to convert the data for 
  8961. you.
  8962.  
  8963. First, ensure the "LH.Library" file resides in your LIBS: directory. The
  8964. INCLUDE-UTIL program will crash if it isn't availble.
  8965.  
  8966.  
  8967. In order to run the program, just click on it's icon, and a custom screen
  8968. will appear containing icons representing the types of data you wish to
  8969. convert to includeable data.  Note that the ST/NT Module button is 
  8970. ghosted, as this data type is not supported in the public domain release 
  8971. of the library.
  8972.  
  8973. You may note there is a gadget to "quit" even though there is also a 
  8974. "close" gadget in the top-left of the main window.  Clicking the close-
  8975. gadget will NOT quit the program, it will merely close the window and 
  8976. screen, then an icon will appear on the Workbench screen.  Simply click 
  8977. the icon to reactivate the program.  (While in this idle mode, INCLUDE-
  8978. UTIL uses no processor time and consumes less memory.)
  8979.  
  8980. Upon clicking one of the other icons, a file requester will appear 
  8981. prompting you to select a source file (the IFF, text, MOD, whatever) to 
  8982. convert. Note that you may load either IFF brushes *OR* BB2 shapes-files 
  8983. in the SHAPES filerequester, the appropriate INCLUDE-OBJECT type will be 
  8984. created.
  8985.  
  8986. After the file has been converted to it's INCLUDE-OBJECT form, you will be
  8987. given a filerequester to SAVE the object with.  Note that an INCLUDE-
  8988. OBJECT extension will be appended to the filename to help you more easily 
  8989. recognise the object types in a directory listing.  They are:
  8990.  
  8991.   .ISFX     - Sound effects
  8992.   .IBMP     - Bitmaps
  8993.   .ISHP     - Single shapes
  8994.   .ISHPS    - Multiple shapes
  8995.   .IMED     - MED modules
  8996.   .IBIN     - Either binary or text (IncText$, IncDataABS, IncData, etc.)
  8997.  
  8998.  
  8999. The INCLUDE-UTIL program accepts tooltypes for default paths. Then
  9000. whenever you click on an appropriate gadget the file requester will use
  9001. the path you prefer.  The following keywords identify the paths:
  9002.  
  9003. SOUNDS=pathname
  9004. BITMAPS=pathname
  9005. SHAPES=pathname
  9006. MODULES=pathname
  9007. BINARIES=pathname
  9008. SAVE=pathname     (This is the same path for saving all object types)
  9009.  
  9010.  
  9011. You should keep the name of this utility "INCLUDE-UTIL" or the tooltype 
  9012. preferences will not be available.
  9013.  
  9014.  
  9015. A few features are available under OS2.0 and above only:  Notably,
  9016. when you iconify INCLUDE-UTIL, it uses a real appicon, so you can drag
  9017. objects onto it to have them automatically identified and loaded.  You
  9018. can also simply double-click the icon without dragging anything if you
  9019. just want to wake the program up.
  9020.  
  9021. Now that you have your INCLUDE-OBJECTs, how do you go about making them
  9022. part of your Blitz2 executeables?  It is relatively simple, but you must 
  9023. be careful to follow these guidelines unless you know EXACTLY what you're 
  9024. doing or you'll crash your Amiga!
  9025.  
  9026.  
  9027. 1.  Place a copy of Include.ElmoreLib in your Blitzlibs:Userlibs 
  9028.     directory, then optionally create a new DEFLIBS file.
  9029.  
  9030. 2.  Write and debug your program using normal loading routines until 
  9031.     you're satisfied with it.  No need to use INCLUDE-OBJECTs during 
  9032.     debugging, as it will only slow down development.  (Before being made 
  9033.     executeable, Blitz2 will both load the objects from disk AND decrunch 
  9034.     them.)
  9035.  
  9036. 3.  Go to the end of your sourcecode (usually the safest place) and select
  9037.     a different program label for EACH INCLUDE-OBJECT to be decrunched at
  9038.     run-time.  Directly following the label, enter INCBIN "filename" which
  9039.     should reference the name you saved the INCLUDE-OBJECT as from 
  9040.     INCLUDE-UTIL. See page 8-3 of your Blitz2 reference manual for details 
  9041.     on INCBIN and INCDIR commands if you're not familiar with them.
  9042.  
  9043. 4.  Ensure you have an "END" statement or some such before your fist
  9044.     INCLUDE-OBJECT's label.  If program flow continues into the data, you 
  9045.     will almost surely have a crash.
  9046.  
  9047. 5.  Replace your Blitz2 DOS-based loading commands with the approriate
  9048.     Include library versions.  It's wise to check the results of those 
  9049.     commands that return "success" or "failure" (TRUE or FALSE) so that 
  9050.     your program can exit gracefully if there isn't enough memory, etc. 
  9051.     when its run.
  9052.  
  9053. 6.  That's all!  You should be able to run your program normally, and
  9054.     executeables you create will run fine with graphics, sounds, whatever
  9055.     you want, and *NO* external files needed!!  Of course since all the 
  9056.     data is included in the size of the executeable, it will be much 
  9057.     larger than usual. (Size of INCLUDE-OBJECTs+normal executeable size)
  9058.     You may have some success crunching the entire executeable with 
  9059.     PowerPacker or similar programs, but if the percentage of 
  9060.     INCLUDE-OBJECT data in the executeable is very high, most crunchers 
  9061.     will choke on it, since most of the program is already crunched
  9062.     by INCLUDE-UTIL.
  9063.  
  9064.  
  9065. Function/Statement: Incsound
  9066. --------------------------------------------------------------------------
  9067. Syntax: success=IncSound(Sound#, ?Label)
  9068.         IncSound Sound#, ?Label
  9069.  
  9070. Description:
  9071. Ensure you put the question mark before the label name or you'll have
  9072. errors!  The actual include-object should be INCBINed directly after the
  9073. label, and be careful to put an END statement somewhere above your INCBIN
  9074. data or you'll crash!
  9075.  
  9076. Example:
  9077.  
  9078. If IncSound(0,?Mysound)=False Then End  ;Unpack the sound or end!
  9079.  
  9080. Sound 0,15  ;Play it back!
  9081. Mousewait   ;pause for the user....
  9082. End
  9083.  
  9084. Mysound:
  9085. IncBin "RAM:SoundEffect.isfx"
  9086.  
  9087. NOTE:  In the above example the FUNCTION version was used so you could
  9088. test it with an IF/THEN statement to see if it was successful...  If
  9089. you don't think you'll need to be so careful, the STATEMENT version would
  9090. be:
  9091.  
  9092. Example:
  9093.  
  9094. IncSound 0,?Mysound  ;Unpack the sound (Note no parentheses for 
  9095.                                        statement!)
  9096. Sound 0,15  ;Play it back!
  9097. Mousewait   ;pause for the user....
  9098. End
  9099.  
  9100.  
  9101. Function/Statement: IncBitmap
  9102. --------------------------------------------------------------------------
  9103. Syntax: success=IncBitmap(bitmap#,?Label)
  9104.         IncBitmap bitmap#,?Label
  9105.  
  9106. Description:
  9107. Nearly identical in useage to IncSound (above) Note that if the bitmap 
  9108. already exists, it should be the same dimensions such as 640x256x4 or 
  9109. IncBitmap will return FALSE (for failure) if you don't know for sure, you
  9110. can let IncBitmap create the bitmap exactly like it was Included by doing 
  9111. FREE BITMAP 0 or some such before you INCBITMAP it.
  9112.  
  9113. Example:
  9114.  
  9115. Blitz
  9116. If IncBitmap(0,?Mypicture)=0 Then End
  9117. Slice 0,32,4
  9118. Show 0
  9119. Mousewait:end
  9120.  
  9121. Mypicture:
  9122. IncBin "RAM:Picture.ibmp"
  9123.  
  9124.  
  9125. Function/Statement: IncMod
  9126. --------------------------------------------------------------------------
  9127. Syntax: success=IncMod(ST-NT Module#,?Label)
  9128.         IncMod Module#,?Label
  9129.  
  9130. Description:
  9131. Like the above examples, only for music mods. You could then use 
  9132. StartModule etc. just as if you had loaded it from disk.
  9133.  
  9134. ----------- NOTE: This function is a bit buggy, so it has
  9135.             been temporarily disabled with this release of
  9136.             the library!  (Sorry!) --------------------------------
  9137.  
  9138.  
  9139. Function/Statement: IncMed
  9140. --------------------------------------------------------------------------
  9141. Syntax: success=IncMed(MEDModule#,?Label)
  9142.         IncMed MedModule#,?Label
  9143.  
  9144. Description:
  9145. For including MED modules.  Usage is otherwise the same as IncMod.
  9146.  
  9147.  
  9148. Function/Statement: IncShape
  9149. --------------------------------------------------------------------------
  9150. Syntax: success=IncShape(Shape#,?Label[,Cookiecut?])
  9151.                 IncShape Shape#,?Label[,Cookiecut?]
  9152.                                           ^^^^
  9153.                                    OPTIONAL DUMMY VALUE
  9154.  
  9155. Description:
  9156. The one you've been waiting for!  Will retrieve the shape# for BLITTING...
  9157. Along with the command below, IncNextShape, you can even include several
  9158. shapes in one step!  I will be adding multiple shapes as an option in the
  9159. INCLUDE-UTIL program as well... For now, just INCBIN as many shapes as you
  9160. want (only need label for the first one)
  9161.  
  9162. Note: If you don't need a cookiecut for the shape, you can leave out the
  9163. CookieCut parameter.  Any number placed in the cookiecut parameter will
  9164. cause a cookiecut to be made for the shape when it is made however.  If
  9165. you plan to do BLITs etc. you should always use the cookiecut.
  9166.  
  9167.  
  9168. Function: IncNextShape
  9169. --------------------------------------------------------------------------
  9170. Syntax  : success=IncNextShape [CookieCut?]
  9171.                                ^^^^^^^^^^^^
  9172.                           OPTIONAL DUMMY VALUE
  9173.  
  9174. Example:
  9175.  
  9176. ;Include shape #0
  9177.  IncShape(0,?Shapes,1)
  9178. ;Will loop 3 times from shape #1 to #3 in this case
  9179. While IncNextShape(1):Wend
  9180. ;(Do your blitting stuff etc. here)
  9181. End
  9182.  
  9183. Shapes:
  9184. IncBin "Shape0.ISHP"
  9185. IncBin "Shape1.ISHP"
  9186. IncBin "Shape2.ISHP"
  9187. IncBin "Shape3.ISHP"
  9188.  
  9189. ;(Note this is a FUNCTION only, no statement version)
  9190.  
  9191.  
  9192. Function: IncText$
  9193. --------------------------------------------------------------------------
  9194. Syntax  : string$=IncText$(?Label[,optional length])
  9195.  
  9196. Description:
  9197. Used with BINARY include types....  You can then put whole text files
  9198. into strings.  The optional LENGTH will limit then string length to
  9199. whatever number you want, similar to the LEFT$ function.
  9200. It will only return a null-string "" in case of failure.
  9201.  
  9202. Example:
  9203.  
  9204. a$=IncText$(?text)
  9205. Nprint a$
  9206. b$=IncText$(?text2,32)
  9207. Nprint b$
  9208. Mousewait:End
  9209.  
  9210. text:
  9211. IncBin "Message.IBIN"
  9212.  
  9213. text2:
  9214. IncBin "Greetz.IBIN"
  9215.  
  9216.  
  9217. Function/Statement: SaveIncData
  9218. --------------------------------------------------------------------------
  9219. Syntax: success=SaveIncData(Filename$,?Label)
  9220.         SaveIncData Filename$,?Label
  9221.  
  9222. Description:
  9223. This will write to disk the unpacked version of whatever BINARY
  9224. include-object you specify.  One good use of this is to save
  9225. programs to RAM and then EXECUTE them, and DELETE them again.
  9226.  
  9227. Of course there are hundreds of uses....
  9228.  
  9229.   If SaveIncData("Ram:newfile",?executeable)=0 Then End
  9230.   Execute_ "Ram:Newfile"
  9231.   KillFile "Ram:Newfile"
  9232.   End
  9233.  
  9234.   executeable:
  9235.   IncBin "myprog.ibin"
  9236.  
  9237.  
  9238. Function: IncData
  9239. --------------------------------------------------------------------------
  9240. Syntax  : Address=IncData(?Label,memory type)
  9241.  
  9242. Description:
  9243. This allows you to include BINARY data for any number of uses that
  9244. aren't provided with the other functions.  Memory types are:
  9245.  
  9246. 0-  Any kind of memory (preferably FAST RAM)
  9247. 2-  CHIP RAM ONLY!
  9248.  
  9249. This function will return the address of the binary data in
  9250. memory, or 0 for failure....
  9251.  
  9252.  
  9253. Example of including a pure ASM routine object file for execution:
  9254.  
  9255. asmloc.l=IncData(?mlroutine,0)
  9256. Call asmloc
  9257. End
  9258.  
  9259. mlroutine:
  9260. IncBin "Ram:MLRoutine.IBIN"
  9261.  
  9262.  
  9263. Function: IncSize
  9264. --------------------------------------------------------------------------
  9265. Syntax  : size.l=IncSize(?Label)
  9266.  
  9267. Description:
  9268. Returns the size in bytes of the BINARY object at the specified label
  9269. Among other uses, you need it if you want to FREE the uncrunched
  9270. binary data.  (It will automatically be freed when your program ends)
  9271.  
  9272.  
  9273. Statement: FreeIncData
  9274. --------------------------------------------------------------------------
  9275. Syntax   : FreeIncData Size,Address
  9276.  
  9277. Description:
  9278. If you wanted to free up the memory allocated by the above IncData
  9279. function, here is how you'd do it:
  9280.  
  9281.   FreeIncData IncSize(?mlroutine),asmloc
  9282.  
  9283.  
  9284. Function: IncDataAbs
  9285. --------------------------------------------------------------------------
  9286. Syntax  : bytesize=IncDataAbs(?Label,Destination Address)
  9287.  
  9288. Description:
  9289.  
  9290. ***********************************************************
  9291. **                                                       **
  9292. **  A D V A N C E D :  Use with caution!                 **
  9293. **                                                       **
  9294. ***********************************************************
  9295.  
  9296. This command will unpack the binary data directly to the area of memory
  9297. you specify, so if you're not sure what you're doing you'll probably
  9298. GURU the Amiga!  However, it is very useful to fill arrays, uncrunch data
  9299. directly to Banks, or whatever.  Just be careful!
  9300.  
  9301. It will return zero for failure, or the number of bytes in the binary
  9302. object.  I'll provide a better example of making use of this function
  9303. later....  (Filling up array variables, etc.)
  9304.  
  9305. InitBank 0,1000,0
  9306. size.l=IncDataAbs(?Binary,BankLoc(0))
  9307. Mousewait:End
  9308.  
  9309. Binary:
  9310. IncBin "binarydata.IBIN"
  9311.  
  9312.  
  9313. Library Name: aaronsiconlib #62
  9314.  
  9315. Author      : Aaron Koolen, Vision Software, 
  9316.               15 Day Street, 
  9317.               Newton, Auckland, NZ
  9318.  
  9319. OverView:
  9320.   Not only has Aaron kindly fixed up passing of argumens in our
  9321.   cliargslib but has also donated this library which similar to
  9322.   the Reflective Images version allows access to information
  9323.   from the programs workbench icon.
  9324.  
  9325. Commands:
  9326.  
  9327.                     GETICONINFO  
  9328.                     ICONTOOL$    
  9329.                     ICONSUBTOOL$ 
  9330.                     ICONTYPE     
  9331.                     ICONSTACK    
  9332.                     ICONDEFTOOL$ 
  9333.  
  9334. Authors Documentation:
  9335.  
  9336. AaronsIconLib
  9337. =============
  9338.  
  9339. This library is for processing the icon (.info) files.  It only provides
  9340. routines for reading the data from icons, not for writing or creating new
  9341. icons, which may be added later.  It is most useful when used in 
  9342. conjunction with the ArgsLib.  You can set the maximum number of allowed 
  9343. icon info's in the options.  Also to free an IconInfo object, after a 
  9344. GetIconInfo use Free IconInfo #
  9345.  
  9346.  
  9347.  
  9348. Function: GetIconInfo
  9349. --------------------------------------------------------------------------
  9350. Syntax: boolean.w=GetIconInfo(icon#,iconname$)
  9351.  
  9352. Description:
  9353. This examines a .info file so you can get information about it.
  9354. 'iconname$' is the name of the icon without the .info suffix and icon# is
  9355. the number of the IconInfo object you want to put the data under.  It will
  9356. return FALSE (0) if it failed, or TRUE (-1) if it succeeded.
  9357.  
  9358.  
  9359. Function: IconTool$
  9360. --------------------------------------------------------------------------
  9361. Syntax: tool$=IconTool$(icon#,toolname$)
  9362.  
  9363. Description:
  9364. Returns the respective data of the tooltype specified by 'toolname$' of
  9365. IconInfo object icon#.
  9366.  
  9367. EG
  9368.  
  9369. If IconTool$(0,"CX_POPUP")="YES" Then Gosub PopUpWindow
  9370.  
  9371.  
  9372. Function: IconSubTool$
  9373. --------------------------------------------------------------------------
  9374. Syntax: boolean.w=IconSubTool$(toolname$,subtool$)
  9375.  
  9376. Description:
  9377. Returns TRUE (-1) or FALSE (0) if the sub tool type 'subtool$' exists
  9378. within the tool 'toolname$'
  9379.  
  9380. EG
  9381.  
  9382.   If IconSubTool$(0,IconTool$(0,"FILETYPE"),"ILBM") Then file type of
  9383.   file was ILBM.
  9384.  
  9385. A Subtool (My word) is one that resides in a tool type but is separated by
  9386. bars (|).  EG
  9387.  
  9388. FILETYPE=PaintProgram|ILBM    (PaintProgram and ILBM are "Sub Tools")
  9389.  
  9390. IconTool$ will return the PaintProgram|ILBM part and you can then use
  9391. IconSubtool$ to see if things like ILBM or PaintProgram exist in that
  9392. string.
  9393.  
  9394. NOTE: This does not require the passing if an IconInfo object, it simply
  9395. requires 2 strings, so you can use it for other things too.
  9396.  
  9397.  
  9398. Function: IconType
  9399. --------------------------------------------------------------------------
  9400. Syntax: type.w=IconType(icon#)
  9401.  
  9402. Description:
  9403. Returns the type of IconInfo object icon#.
  9404.  
  9405. EG  NPrint IconType(0)
  9406.  
  9407. 'type' is one of the list from workbench/workbench.bb2.
  9408.  
  9409.  
  9410. Function: IconStack
  9411. --------------------------------------------------------------------------
  9412. Syntax: stackSize.l=IconStack(icon#)
  9413.  
  9414. Description:
  9415. Returns the stack sie setting of the icon.
  9416.  
  9417.  
  9418. Function: IconDefTool$
  9419. --------------------------------------------------------------------------
  9420. Syntax: deftool$.w=IconDefTool$(icon#)
  9421.  
  9422. Description:
  9423. Returns the default tool of the icon.
  9424.  
  9425. EG  NPrint IconDefTool$(icon#)
  9426.  
  9427. May print something like "blitz2:blitz2" if icon# references a Blitz2 
  9428. source program.
  9429.  
  9430.  
  9431.  ALLOCMEM                  FREEMEM             
  9432.  BANK                      FROMCLI             
  9433.  BLOCKSCROLL               GAMEB                   
  9434.  CLIPBLITMODE              GTARROWSIZE              
  9435.  CUSTOMCOLORS              GTSTATUS                 
  9436.  CUSTOMSTRING              INITPALETTE              
  9437.  CYCLEPALETTE              INITSHAPE                
  9438.  DECODEILBM                LOADBANK               
  9439.  DECODEMEDMODULE           NUMPARS             
  9440.  DECODEPALETTE             PALETTERANGE        
  9441.  DECODESHAPES              PAR$                     
  9442.  DECODESOUND               PARPATH$                 
  9443.  DISPLAYDBLSCAN            POPINPUT            
  9444.  DISPLAYRAINBOW            POPOUTPUT           
  9445.  DISPLAYRGB                READSERIALMEM          
  9446.  DISPLAYSCROLL             SAVEPALETTE              
  9447.  DISPLAYUSER               SETPERIOD               
  9448.  DUPLICATEPALETTE          WRITESERIALMEM      
  9449.  FADEPALETTE              
  9450.  
  9451.  
  9452. Function: Bank
  9453. --------------------------------------------------------------------------
  9454. Syntax  : Bank(Bank#)
  9455.  
  9456. Returns the memory location of the given memory Bank, replaces the older
  9457. and more stupidly named BankLoc command.
  9458.  
  9459.  
  9460. Statement: BlockScroll 
  9461. --------------------------------------------------------------------------
  9462. Syntax   : BlockScroll X1,Y1,Width,Height,X2,Y2[,BitMap#] 
  9463.  
  9464. library: scrolllib
  9465.  
  9466. Description:
  9467. Same as the Scroll command except that BlockScroll is much faster but
  9468. only works with 16 bit aligned areas. This means that X1, X2 and Width
  9469. must all be multiples of 16. Useful for block scrolling routines that
  9470. render the same blocks to both sides of the display, the programmer
  9471. can now choose to render just one set and then copy the result to the
  9472. other side with the BlockScroll command.
  9473.  
  9474.  
  9475. Statement: ClipBlitMode
  9476. --------------------------------------------------------------------------
  9477. Syntax   : ClipBlitMode BPLCON0
  9478. Library  : 2dlib
  9479.  
  9480. Description:
  9481. Same as BlitMode except applies to the ClipBlit command. Another oversight
  9482. now fixed.
  9483.  
  9484.  
  9485. Statement: CustomColors
  9486. --------------------------------------------------------------------------
  9487. Syntax   : CustomColors CopList#,CCOffset,YPos,Palette,startcol,numcols 
  9488. Library  : displaylib
  9489.  
  9490. Using the custom copper space in a display, CustomColors will alter the 
  9491. displays palette at the given YPos. The number of customcops required is 
  9492. either 2+numcols for ecs displays and 2+n+n+n/16 for aga displays. In aga, 
  9493. numcols must be a multiple of 32.
  9494.  
  9495. Note that large AGA palette changes may take several lines of the display 
  9496. to be complete.
  9497.  
  9498.  
  9499. Statement: CustomString
  9500. --------------------------------------------------------------------------
  9501. Syntax   : CustomString CopList#,CCOffset,YPos,Copper$
  9502. Library  : displaylib
  9503.  
  9504. Description:
  9505. CustomString allows the user to insert their own copper commands 
  9506. (contained in a string) into the display's copper list at a given vertical
  9507. position. The amount of space required is equal to the number of copper 
  9508. instructions in the Copper$ (length of string divide by 4) plus 2 which of 
  9509. course have to be allocated with InitCopList before CustomString is used.
  9510.  
  9511.  
  9512. Statement: CyclePalette
  9513. --------------------------------------------------------------------------
  9514. Syntax   : CyclePalette Palette# 
  9515. Library  : palettelib
  9516.  
  9517. Description:
  9518. CyclePalette uses the standard color cycling parameters in the palette
  9519. object to cycle the colors. Unlike the Cycle command which copied the
  9520. resulting palette to the current screen the CyclePalette command just
  9521. modifies the palette object and can hence be used with the DisplayBitmap
  9522. command in the new Display library.
  9523.  
  9524.  
  9525. Statement: DecodeILBM
  9526. --------------------------------------------------------------------------
  9527. Syntax   : DecodeILBM BitMap#,MemoryLocation
  9528. Library  : ilbmifflib
  9529.  
  9530. Description:
  9531. A very fast method of unpacking standard iffilbm data to a bitmap. Not
  9532. only does this command allow a faster method of loading standard IFF
  9533. files but allows the programmer to "incbin" iff pictures in their programs.
  9534. See the discussion above for using DecodeILBM on both files and included
  9535. memory.
  9536.  
  9537.  
  9538. Statement: DecodeMedModule
  9539. --------------------------------------------------------------------------
  9540. Syntax   : DecodeMedModule MedModule#,MemoryLocation
  9541. Library  : medlib
  9542.  
  9543. Description:
  9544. DecodeMedModule replaces the cludgemedmodule, as med modules are not 
  9545. packed but used raw, DecodeMedModule simply checks to see the 
  9546. memorylocation passed is in ChipMem (if not it copies the data to chip) 
  9547. and points the Blitz2 MedModule object to that memory.
  9548.  
  9549.  
  9550. Statement: DecodePalette
  9551. --------------------------------------------------------------------------
  9552. Syntax   : DecodePalette Palette#,MemoryLocation[,Palette Offset]
  9553. Library  : palettelib
  9554.  
  9555. Description:
  9556. DecodePalette allows the programmer to unpack included iff palette 
  9557. information to Blitz2 palette objects.
  9558.  
  9559.  
  9560. Statament: DecodeShapes
  9561. --------------------------------------------------------------------------
  9562. Syntax   : DecodeShapes Shape#[,Shape#],MemoryLocation
  9563. Library  : shapeslib
  9564.  
  9565. Description:
  9566. DecodeShapes, similar to DecodeMedModule ensures the data is in chip and
  9567. then configures the Shape object(s) to point to the data.
  9568.  
  9569.  
  9570. Statement: DecodeSound
  9571. --------------------------------------------------------------------------
  9572. Syntax   : DecodeSound Sound#,MemoryLocation
  9573. Library  : audiolib
  9574.  
  9575. Description:
  9576. DecodeSound similar to the other new Decode commands allows the programmer
  9577. to include sound files within their program's object code.
  9578.  
  9579.  
  9580. Statement: DisplayDblScan
  9581. --------------------------------------------------------------------------
  9582. Syntax   : DisplayDblScan CopList#,Mode[,copoffset]
  9583. Library  : displaylib
  9584.  
  9585. Description:
  9586. DisplayDblScan is used to divide the vertical resolution of the display by
  9587. 2,4,8 or 16 using Modes 1,2,3 and 4. This is most useful for fast bitmap
  9588. based zooms. A Mode of 0 will return the display to 100% magnification.
  9589.  
  9590. As with the DisplayRainbow, DisplayRGB, DisplayUser and DisplayScroll
  9591. commands DisplayDblScan uses the new line by line copper control of the
  9592. display library. To initialise this mode a negative parameter is used
  9593. in the CustomCops parameter of the InitCopList command. DisplayDblScan
  9594. requires 2 copper instructions per line (make CustomCops=-2).
  9595.  
  9596.  
  9597. Statement: DisplayRainbow
  9598. --------------------------------------------------------------------------
  9599. Syntax   : DisplayRainbow CopList#,Register,Palette[,copoffset]
  9600. Library  : displaylib
  9601.  
  9602. Description:
  9603. DisplayRainbow is used to alter a certain colour register vertically down
  9604. a display. It simple maps each colour in a palette to the coresponding
  9605. vertical position of the display. ECS displays require one copper 
  9606. instruction per line while AGA displays require 4.
  9607.  
  9608.  
  9609. Statement: DisplayRGB
  9610. --------------------------------------------------------------------------
  9611. Syntax   : DisplayRGB CopList#,Register,line,r,g,b[,copoffset]
  9612. Library  : displaylib
  9613.  
  9614. Description:
  9615. DisplayRGB is a single line version of DisplayRainbow allowing the 
  9616. programmer to alter any register of any particular line. As with 
  9617. DisplayRainbow ECS displays require 1 copper instruction while AGA 
  9618. requires 4.
  9619.  
  9620.  
  9621. Statement: DisplayScroll
  9622. --------------------------------------------------------------------------
  9623. Statement: DisplayScroll CopList#,&xpos.q(n),&xpos.q(n)[,Offset]
  9624. Library  : displaylib
  9625.  
  9626. Description:
  9627. DisplayScroll allows the program to dynamically display any part of a 
  9628. bitmap on any line of the display. DisplayScroll should always follow the 
  9629. DisplayBitMap command. The parameters are two arrays holding a list of 
  9630. xoffsets that represent the difference in horizontal position from the line 
  9631. above. AGA machines are able to use the fractional part of each entry for 
  9632. super hiresolution positioning of the bitmap. Three instructions per line 
  9633. are required for the DisplayScroll command.
  9634.  
  9635.  
  9636. Statement: DisplayUser
  9637. --------------------------------------------------------------------------
  9638. Syntax   : DisplayUser CopList#,Line,String[,Offset]
  9639. Library  : displaylib
  9640.  
  9641. Description:
  9642. DisplayUser allows the programmer to use their own Copper$ at any line of
  9643. the display. Of course copper instructions have to be allocated with the
  9644. number of copper instructions in the InitCoplist multiplied by -1.
  9645.  
  9646.  
  9647. Statement: DuplicatePalette
  9648. --------------------------------------------------------------------------
  9649. Syntax   : DuplicatePalette SrcPalette#,DestPalette#
  9650. Library  : palettelib
  9651.  
  9652. Description:
  9653. DuplicatePalette simply creates a new Palette which exactly matches the
  9654. SrcPalette.
  9655.  
  9656.  
  9657. Statement: FadePalette
  9658. --------------------------------------------------------------------------
  9659. Syntax   : FadePalette SrcPalette#,DestPalette#,Brightness.q
  9660. Library  : palettelib
  9661.  
  9662. Description:
  9663. FadePalette multiplies all colours in a Palette by the Brightness argument
  9664. and places the result in the DestPalette.
  9665.  
  9666.  
  9667. Statement: FreeMem
  9668. --------------------------------------------------------------------------
  9669. Syntax   : FreeMem location,size
  9670. Library  : banklib
  9671.  
  9672. Description:
  9673. Used to free any memory allocated with the AllocMem command.
  9674.  
  9675.  
  9676. Function: FromCLI
  9677. --------------------------------------------------------------------------
  9678. Function: FromCLI 
  9679. Library : cliargslib
  9680.  
  9681. Description:
  9682. Returns TRUE (-1) if your program was run from the CLI, or FALSE (0) if run
  9683. from the WorkBench.
  9684.  
  9685.  
  9686. Function: GameB
  9687. --------------------------------------------------------------------------
  9688. Syntax  : GameB(por#) 
  9689. Library : gameiolib
  9690.  
  9691. Description:
  9692. Returns button state of cd32 style game controllers - values returned are:
  9693.  
  9694. 1  = play/pause
  9695. 2  = reverse
  9696. 4  = forward
  9697. 8  = green
  9698. 16 = yellow
  9699. 32 = red
  9700. 64 = blue
  9701.  
  9702. If more than one button is held down, values are added together. For 
  9703. example, a value of 6 means both the forward (4) and reverse (2) buttons 
  9704. are held down. Use an 'and' to isolate the status of a single button, like
  9705. this -
  9706.  
  9707. ;check RED button on port 1...
  9708. ;
  9709. if gameb(1) & 32
  9710.   ;
  9711.   ;RED button is down...
  9712.   ;
  9713. else
  9714.   ;
  9715.   ;RED button is NOT down...
  9716.   ;
  9717. endif
  9718.  
  9719.  
  9720. Statement: GTArrowSize
  9721. --------------------------------------------------------------------------
  9722. Syntax   : GTArrowSize size
  9723. Library  : bbgtlib
  9724.  
  9725. Description:
  9726. Allows the size of GTScroller arrows to be preset. Default size is 16.
  9727.  
  9728.  
  9729. Function: GTStatus
  9730. --------------------------------------------------------------------------
  9731. Syntax  : GTStatus(GTList#,Id)
  9732. Library : bbgtlib
  9733.  
  9734. Description:
  9735. GTStatus returns the status of and gadtools toggle gadgets, a value
  9736. of 1 means the the gadget is selected, 0 deselected.
  9737.  
  9738.  
  9739.  
  9740. Statement: InitPalette
  9741. --------------------------------------------------------------------------
  9742. Syntax   : InitPalette Palette#,NumColors
  9743. Library  : palettelib
  9744.  
  9745. Description:
  9746. InitPalette simply initialises a palette object to hold NumColors. All 
  9747. colors will be set to black.
  9748.  
  9749.  
  9750. Statement: InitShape
  9751. --------------------------------------------------------------------------
  9752. Syntax   : InitShape Shape#,Width,Height,Depth
  9753. Library  : shapeslib
  9754.  
  9755. Description:
  9756. InitShape has been added to simple create blank shape objects. Programmers
  9757. who make a habit of using ShapesBitMap to render graphics to a shape 
  9758. object will appreciate this one for sure.
  9759.  
  9760.  
  9761. Statement: LoadBank
  9762. --------------------------------------------------------------------------
  9763. Syntax   : LoadBank Bank#,FileName$[,MemType]
  9764.  
  9765. Description:
  9766. The LoadBank command has been modified, instead of having to initialise
  9767. the bank before loading a file, LoadBank will now initialise the bank
  9768. to the size of the file if it is not already large enough or has not been
  9769. initialised at all.
  9770.  
  9771.  
  9772. Function: NumPars
  9773. --------------------------------------------------------------------------
  9774. Syntax  : NumPars 
  9775. Library : cliargslib
  9776.  
  9777. Description:
  9778. Returns the number of parameters passed to your program.
  9779.  
  9780.  
  9781.  
  9782. Statement: PaletteRange
  9783. --------------------------------------------------------------------------
  9784. Syntax   : PaletteRange Palette#,StartCol,EndCol,r0,g0,b0,r1,g1,b1
  9785. Library  : palettelib
  9786.  
  9787. Description:
  9788. PaletteRange creates a spread of colors within a palette. Similar to 
  9789. DPaint's spread function PaletteRange takes a start and end colour and 
  9790. creates the color tweens between them.
  9791.  
  9792.  
  9793. Function: Par$
  9794. --------------------------------------------------------------------------
  9795. Syntax  : Par$(parameter#) 
  9796. Library : cliargslib
  9797.  
  9798. Description:
  9799. Returns the string value of a parameter.  
  9800.  
  9801. NOTE: If the parameter asked for is a directory/device/volume etc
  9802. (IE NOT A FILE) then Par$(#) will return an empty string.  This is a one
  9803. way you can check to see if a file was passed or not.
  9804.  
  9805.  
  9806. Function: ParPath$
  9807. --------------------------------------------------------------------------
  9808. Syntax  : ParPath$ (parameter,type)
  9809. Library : cliargslib
  9810.  
  9811. Description:
  9812. This returns the path that this parameter resides in. 'type' specifies 
  9813. how you want the path returned.
  9814.  
  9815. 0 You want only the directory of the parameter returned.
  9816. 1 You want the directory along with the parameter name returned.
  9817.  
  9818. EG:
  9819.  
  9820. If you passed the parameter "FRED" to your program from WorkBench, and 
  9821. FRED resides in the directory "work:mystuff/myprograms" then ParPath$(0,0)
  9822. will return "work:mystuff/myprograms", but ParPath$(0,1) will return
  9823. "work:mystuff/myprograms/FRED".
  9824.  
  9825. CAVEAT
  9826. The way WB handles argument passing of directories is different to that 
  9827. of files.  When a directory is passed as an argument, ArgsLib gets an 
  9828. empty string for the name, and the directory string holds the path to the
  9829. passed directory AND the directory name itself.  EG
  9830.  
  9831. Passing the blitz2 directory to a program will result in:
  9832.  
  9833. Par$(x)     Being an empty string.
  9834. ParPath$(x,0)   Being something like work:Basic/blitz2.
  9835. ParPath$(x,1) Being work:Basic/blitz2/
  9836.  
  9837. YES!  The / is appended!  This is because to keep things simpler, and more
  9838. uniform ParPath$(x,1) Is the concatenation of
  9839.  
  9840. 1)  The directory string passed by Workbench
  9841.  
  9842. AND
  9843.  
  9844. 2)  A / followed by the name given by WorkBench.
  9845.  
  9846. So you can see why the / followed by the empty string occurs.
  9847.  
  9848. The easy way around this is simply to check Par$(x), if it is empty, then
  9849. use ParPath$(x,0), if it isn't (IE a file was passed) use ParPath$(x,1) 
  9850. and you will have the entire pathname of the file OR directory.
  9851.  
  9852. See the demo program, which handles both cases.
  9853.  
  9854. NOTE 2: Is only useable from WorkBench, you will get an error if your 
  9855. program was run from the CLI and you try to call ParPath$.
  9856.  
  9857.  
  9858. Statement: PopInput & PopOutput
  9859. --------------------------------------------------------------------------
  9860. Library  : inputoutputlib
  9861.  
  9862. Description:
  9863. After input or output has been re-directed (eg using windowoutput/
  9864. fileoutput), these two commands may be used to return the channel to it's 
  9865. previous condition. 
  9866.  
  9867.  
  9868. Statement: ReadSerialMem
  9869. --------------------------------------------------------------------------
  9870. Syntax   : ReadSerialMem Unit#,Address,Length
  9871. Library  : seriallib
  9872.  
  9873. Description:
  9874. ReadSerialMem will fill the given memory space with data from the
  9875. given serial port.
  9876.  
  9877.  
  9878. Statement: SavePalette
  9879. --------------------------------------------------------------------------
  9880. Syntax   : SavePalette Palette#,FileName$
  9881. Library  : iffmakelib
  9882.  
  9883. Description:
  9884. Creates a standard IFF "CMAP" file using the given Palette's colors.
  9885.  
  9886.  
  9887. Statement: SetPeriod
  9888. --------------------------------------------------------------------------
  9889. Syntax   : SetPeriod Sound#,Period
  9890. Library  : audiolib
  9891.  
  9892. Description:
  9893. Hmmm, not sure why we never included this command in the original 
  9894. audiolib, SetPeriod simply allows the user to override the frequence 
  9895. information (period) of the sound object after it has been loaded. To 
  9896. alter a sound's pitch while playing programmers should hit the audio 
  9897. hardware direct (hardware locations are listed at the back of the 
  9898. reference manual).
  9899.  
  9900.  
  9901. Statement: WriteSerialMem
  9902. --------------------------------------------------------------------------
  9903. Syntax   : WriteSerialMem Unit#,Address,Length
  9904. Library  : seriallib
  9905.  
  9906. Description:
  9907. WriteSerialMem send the given memory space out the given serial port.
  9908.  
  9909.  
  9910.           All the commands are now sorted, few that was a lot of work!
  9911.        But what the hell, it's finished now (until a new BUM is released)
  9912.  
  9913.                                 Choose a letter:
  9914.  
  9915.                                 A             N    
  9916.                                 B             O    
  9917.                                 C             P    
  9918.                                 D             Q    
  9919.                                 E             R    
  9920.                                 F             S    
  9921.                                 G             T    
  9922.                                 H             U    
  9923.                                 I             V    
  9924.                                 J             W    
  9925.                                 K             X    
  9926.                                 L             Y    
  9927.                                 M             Z    
  9928.  
  9929.  
  9930. - A -
  9931.  
  9932.  ACTIVESCREEN              ANIMLOOP            
  9933.  ACTIVEWINDOW              APPEVENT            
  9934.  ADDAPPICON                APPICONEVENT        
  9935.  ADDAPPMENU                APPICONFILE         
  9936.  ADDAPPWINDOW              APPICONHIT          
  9937.  ADDVALUE                  APPMENUEVENT        
  9938.  AGABLUE                   APPMENUFILE         
  9939.  AGAFILLPALETTE            APPMENUHIT              
  9940.  AGAGREEN                  APPWINDOWEVENT      
  9941.  AGAPALBLUE                APPWINDOWFILE       
  9942.  AGAPALGREEN               ASLFILEREQUEST      
  9943.  AGAPALRED                 ASLFONTREQUEST      
  9944.  AGAPALRGB                 ASLSCREENREQUEST$   
  9945.  AGARED                    ATTACHGTLIST        
  9946.  AGARGB                    AVG                 
  9947.  ALLFIRE                   AVG.L                
  9948.  ALLOCMEM                  AVG.Q                             
  9949.  ANALYZEDISK         
  9950.  
  9951.  
  9952. - B -
  9953.  
  9954.  BANK                     
  9955.  BEEPSCREEN          
  9956.  BIN#                
  9957.  BITMAPTOWINDOW      
  9958.  BITPLANESBITMAP     
  9959.  BLITCOLL            
  9960.  BLOAD                    
  9961.  BLOCK               
  9962.  BLOCKSCROLL              
  9963.  BSAVE                    
  9964.  BUTTONGROUP         
  9965.  BUTTONID            
  9966.  
  9967.  
  9968. - C -
  9969.  
  9970.  CACHEOFF                  CLOSEDISK                 CRMDECRUNCH         
  9971.  CACHEPCF                  CLOSESCREEN               CUSTOMCOLORS          
  9972.  CHARCOUNT                 CLOSESERIAL               CUSTOMSTRING           
  9973.  CHDIR                     CLOSEWINDOW               CXAPPEAR              
  9974.  CHECKAGA                  CLUDGESHAPES              CXCHANGELIST          
  9975.  CHECKPRT                  CLUDGESOUND               CXDISABLE              
  9976.  CHECKSUM                  COLOURREQUEST             CXDISAPPEAR           
  9977.  CHIPFREE                  COMMODITIEBASE            CXENABLE              
  9978.  CHUNKHEADER               COMMODITYEVENT            CXKILL                  
  9979.  CHUNKYTOPLANAR            CON_BASE                  CXUNIQUE              
  9980.  CIPHER$                   COPYBYTE                  CYCLEPALETTE              
  9981.  CLEARBITMAP               COPYFILE                             
  9982.  CLEARREXXMSG              COPYLONG                     
  9983.  CLEARTOOLTYPES            COPYWORD                     
  9984.  CLICKMOUSE                CREATEARGSTRING      
  9985.  CLIPBLIT                  CREATEDISPLAY                
  9986.  CLIPBLITMODE              CREATEMSGPORT             
  9987.  CLOSECONSOLE              CREATEREXXMSG           
  9988.  
  9989.  
  9990. - D -
  9991.  
  9992.  DATE$                     DEREZ                     DISPLAYUSER              
  9993.  DATEFORMAT                DISABLE                   DOSBASE                         
  9994.  DAYS                      DISKBLOCKS                DOS_BASE                
  9995.  DECODEILBM                DISKCAPACITY              DUPLICATEPALETTE      
  9996.  DECODEMEDMODULE           DISKERRS               
  9997.  DECODEPALETTE             DISKFONTBASE         
  9998.  DECODESHAPES              DISKFREE             
  9999.  DECODESOUND               DISKUNIT            
  10000.  DECRYPT                   DISKUSED            
  10001.  DEICE                     DISPLAYADJUST       
  10002.  DELAPPICON                DISPLAYBITMAP         
  10003.  DELAPPMENU                DISPLAYCONTROLS      
  10004.  DELAPPWINDOW              DISPLAYDBLSCAN      
  10005.  DELETEARGSTRING           DISPLAYPALETTE      
  10006.  DELETEMSGPORT             DISPLAYRAINBOW       
  10007.  DELETEREXXMSG             DISPLAYRGB                    
  10008.  DEPLODE                   DISPLAYSCROLL        
  10009.  DEPTH                     DISPLAYSPRITE         
  10010.  
  10011.  
  10012. - E -
  10013.  
  10014.  EASYREQUEST               EXCHANGEDISABLE     
  10015.  ENABLE                    EXCHANGEDISAPPEAR   
  10016.  ENCRYPT                   EXCHANGEENABLE      
  10017.  ENTRYBIT$                 EXCHANGEKILL        
  10018.  ENTRYCOMMENT$             EXCHANGEMESSAGE     
  10019.  ENTRYDATE                 EXCHANGEUNIQUE      
  10020.  ENTRYDIR                  EXECVERSION         
  10021.  ENTRYHOUR                 EXISTS                  
  10022.  ENTRYMINS                   
  10023.  ENTRYNAME$                  
  10024.  ENTRYSECS                 
  10025.  ENTRYSIZE                  
  10026.  ERASE                       
  10027.  ERASEALL                     
  10028.  EVENTCODE                 
  10029.  EVENTQUALIFIER            
  10030.  EXCHANGEAPPEAR           
  10031.  EXCHANGECHANGELIST  
  10032.  
  10033.  
  10034. - F -
  10035.  
  10036.  FADEINBITMAP         FNSLENGTH            FREEINCDATA    
  10037.  FADEPALETTE          FNSLOAD              FREEMEM        
  10038.  FASTFREE             FNSORIGIN            FREEPCFCACHE     
  10039.  FFPBASE              FNSOUTPUT            FREEZONETABLE  
  10040.  FILEFILTER           FNSPREFS             FREQ                     
  10041.  FILEREQSIZE          FNSPRINT             FROMCLI               
  10042.  FILESIZE             FNSSETTAB            
  10043.  FILESTRUCTURE        FNSSLOT              
  10044.  FILLMEM              FNSUNDERLINE       
  10045.  FILLPALETTE          FNSUNLOAD            
  10046.  FILLREXXMSG          FNSVERSION         
  10047.  FINDTOOLNUMBER       FNSWIDTH         
  10048.  FINDTOOLTYPE         FORCENTSC          
  10049.  FINDTOOLVALUE        FORCEPAL          
  10050.  FNSCLIP              FORMATTRACK    
  10051.  FNSCLIPOUTPUT        FRAMES            
  10052.  FNSHEIGHT            FREECATALOG    
  10053.  FNSINK               FREEICONOBJECT   
  10054.  
  10055.  
  10056. - G -
  10057.  
  10058.  GAGETSTATUS           GTCHANGELIST    
  10059.  GAMEB                 GTGADPTR            
  10060.  GETICONINFO           GTSETATTRS       
  10061.  GETICONOBJECT         GTSTATUS           
  10062.  GETLOCALESTR          GTTAGS                
  10063.  GETMEDINSTR        
  10064.  GETMEDNOTE      
  10065.  GETMEDVOLUME    
  10066.  GETRESULTSTRING 
  10067.  GETREXXCOMMAND   
  10068.  GETREXXRESULT     
  10069.  GETSTRING$      
  10070.  GETSUPERBITMAP  
  10071.  GETWHEEL        
  10072.  GFX_BASE        
  10073.  GRAPHICSBASE    
  10074.  GTARROWSIZE          
  10075.  GTBEVELBOX      
  10076.  
  10077.  
  10078. - H -
  10079.  
  10080.  HARDCOPY            
  10081.  HEX#                
  10082.  HIDESCREEN          
  10083.  HOTKEYHIT           
  10084.  HOURS               
  10085.  
  10086.  
  10087. - I -
  10088.  
  10089.  ICONBASE               INCSHAPE         
  10090.  ICONDEFAULTTOOL        INCSIZE            
  10091.  ICONDEFTOOL$           INCSOUND           
  10092.  ICONRENDER             INCTEXT$         
  10093.  ICONSTACK              INITANIM          
  10094.  ICONSUBTOOL$           INITCOPLIST       
  10095.  ICONTOOL$              INITPALETTE      
  10096.  ICONTYPE               INITSHAPE        
  10097.  ILBMGRAB               INITZOOMXY       
  10098.  ILBMPALETTE            INSTALLFNS         
  10099.  ILBMVIEWMODE           INTUITIONBASE    
  10100.  IMPLODE                INT_BASE         
  10101.  INCBITMAP              ISEVEN           
  10102.  INCDATA                ISLOCALE         
  10103.  INCDATAABS             ISREQTOOLSACTIVE 
  10104.  INCMED                 ISREXXMSG           
  10105.  INCMOD                  
  10106.  INCNEXTSHAPE        
  10107.  
  10108.  
  10109. - J -
  10110.  
  10111.  JFIRE               
  10112.  JHORIZ              
  10113.  JOYC                
  10114.  JUMPMED                      
  10115.  JVERT               
  10116.  
  10117.  
  10118. - K -
  10119.  
  10120.  KEYCODE                        
  10121.  
  10122.  
  10123. - L -
  10124.  
  10125.  LARGEST             
  10126.  LARGEST.L           
  10127.  LARGEST.Q           
  10128.  LARGESTFREE         
  10129.  LENGTH                          
  10130.  LISA                              
  10131.  LOADANIM             
  10132.  LOADFONT            
  10133.  LOADIFF             
  10134.  LOADIFF             
  10135.  LOADMEDMODULE                
  10136.  LOADPCF             
  10137.  LOADSHAPE           
  10138.  
  10139.  
  10140. - M -
  10141.  
  10142.  MAKECOMMODITY       
  10143.  MAKEDIR                  
  10144.  MATCHTOOLVALUE      
  10145.  MAX                                     
  10146.  MEMFREE                             
  10147.  MIN                                     
  10148.  MINS                
  10149.  MONTHS              
  10150.  MOREENTRIES              
  10151.  MOTOROFF            
  10152.  MOTORON             
  10153.  MOVESCREEN          
  10154.  
  10155.  
  10156. - N -
  10157.  
  10158.  NAMEFILE              
  10159.  NEWPALETTEMODE    
  10160.  NEWTOOLTYPE    
  10161.  NEWZONETABLE   
  10162.  NEXTBANK              
  10163.  NEXTFILE$      
  10164.  NEXTFRAME      
  10165.  NPRINTCON      
  10166.  NULL           
  10167.  NUMDAYS        
  10168.  NUMPARS        
  10169.  
  10170.  
  10171. - O -
  10172.  
  10173.  OPENCONSOLE         
  10174.  OPENDISK            
  10175.  OPENSERIAL          
  10176.  
  10177.  
  10178. - P -
  10179.  
  10180.  PALADJUST                 PLOAD               
  10181.  PALBLUE                   POLY                
  10182.  PALETTEINFO               POLYF               
  10183.  PALETTERANGE              POPINPUT             
  10184.  PALGREEN                  POPOUTPUT           
  10185.  PALRED                    POSITIONSUPERBITMAP 
  10186.  PAR$                      PPDECRUNCH          
  10187.  PARPATH$                  PRINTCON            
  10188.  PATHLOCK                  PROCESSOR           
  10189.  PCFDEPTH                  PRTCOMMAND          
  10190.  PCFHEIGHT                 PRTTEXT             
  10191.  PCFINFO                   PUTICONOBJECT       
  10192.  PCFVERSION                PUTSUPERBITMAP        
  10193.  PCFWIDTH               
  10194.  PEEKTO$                     
  10195.  PHONETICSPEAK         
  10196.  PLANARTOCHUNKY               
  10197.  PLAYMED                   
  10198.  
  10199.  
  10200. - Q -
  10201.  
  10202.  QUIET               
  10203.  
  10204.  
  10205. - R -
  10206.  
  10207.  READSECTOR          REQUEST                       RTEZFLAGSREQUEST            RTREQUEST        
  10208.  READSERIAL          REQ_BASE                      RTEZFONTREQUEST             RTREVISION               
  10209.  READSERIALMEM       RESERVE                       RTEZFREEPATTERN             RTUNLOCKWINDOW   
  10210.  READSERIALMEM       RESETTIMER                    RTEZGETLONG                 RTVERSION        
  10211.  READSERIALSTRING    REXXERROR                     RTEZGETLONGRANGE            RUNERRSOFF       
  10212.  REBOOT              REXXEVENT                     RTEZGETSTRING               RUNERRSON                 
  10213.  REDUCEX2            REXXSYSBASE                   RTEZLOADFILE                         
  10214.  REMAP               REX_BASE                      RTEZMULTILOADFILE         
  10215.  REMOVEFNS           RIANIMINIT                    RTEZPALETTEREQUEST        
  10216.  RENAME              RINEXTANIMFRAME               RTEZPATHREQUEST           
  10217.  REPEATS             RRANDOMIZE                    RTEZREQUEST               
  10218.  REPLYREXXMSG        RRND                          RTEZRNEXTPATHENTRY       
  10219.  REQCOLOURS          RTASYNCPALETTEREQUEST         RTEZSAVEFILE              
  10220.  REQFILELOC          RTASYNCREQUEST                RTEZSCREENMODEREQUEST     
  10221.  REQFILEREQUEST      RTCHECKASYNCPALETTEREQUEST    RTEZSETDEFAULTDIRECTORY  
  10222.  REQFILEREQUEST$     RTCHECKASYNCREQUEST           RTEZSETPATTERN           
  10223.  REQFONTSIZE         RTENDASYNCPALETTEREQUEST      RTFILEREQUEST            
  10224.  REQOUTPUT           RTENDASYNCREQUEST             RTLOCKWINDOW             
  10225.  
  10226.  
  10227. - S -
  10228.  
  10229.  SAVEINCDATA        SETMEDVOLUME       SPACE$         
  10230.  SAVEPALETTE        SETPERIOD          SPEAK            
  10231.  SCREENHEIGHT       SETSERIALBUFFER    SPRITEMODE     
  10232.  SCREENTAGS         SETSERIALLENS      START          
  10233.  SCREENWIDTH        SETSERIALPARAMS    STARTMEDMODULE   
  10234.  SEARCHBEGIN        SETSTATUS          STOPMED        
  10235.  SEARCHEND          SETTOOLVALUE       SYSTEMDATE         
  10236.  SEARCHSTRING       SETVOICE            
  10237.  SECS               SETZONE              
  10238.  SENDREXXCOMMAND    SHAPEGADGET        
  10239.  SERIALEVENT        SHAPETOICON     
  10240.  SETBPLCON0         SHOWBITMAP      
  10241.  SETCOPYBUFFER      SHOWPALETTE      
  10242.  SETGADGETSTATUS    SHOWREQUESTORS    
  10243.  SETHOTKEY          SMALLEST        
  10244.  SETICONHIT         SMALLEST.L      
  10245.  SETICONTYPE        SMALLEST.Q      
  10246.  SETMEDMASK         SORTLIST               
  10247.  
  10248.  
  10249. - T -
  10250.  
  10251.  TEXTREQUEST     
  10252.  TEXTTIMEOUT     
  10253.  TICKS           
  10254.  TIMER                                  
  10255.  TRANSLATE$      
  10256.  
  10257.  
  10258. - U -
  10259.  
  10260.  UNPACKIFF           
  10261.  UNPACKPCF           
  10262.  USECATALOG          
  10263.  USEZONETABLE        
  10264.  
  10265.  
  10266. - V -
  10267.  
  10268.  VOICELOC            
  10269.  VPOS                
  10270.  VWAITPOS            
  10271.  
  10272.  
  10273. - W -
  10274.  
  10275.  WAIT                
  10276.  WAITFOR             
  10277.  WBDEPTH             
  10278.  WBHEIGHT            
  10279.  WBLIT               
  10280.  WBVIEWMODE          
  10281.  WBWIDTH             
  10282.  WEEKDAY             
  10283.  WINDOW              
  10284.  WPRINTSCROLL        
  10285.  WRITEBOOT           
  10286.  WRITESECTOR         
  10287.  WRITESERIAL         
  10288.  WRITESERIALMEM      
  10289.  WRITESERIALMEM      
  10290.  WRITESERIALSTRING   
  10291.  WTITLE              
  10292.  
  10293.  
  10294. - X -
  10295.  
  10296.  XOR                 
  10297.  XOR                 
  10298.  
  10299.  
  10300. - Y -
  10301.  
  10302.  YEARS               
  10303.  
  10304.  
  10305. - Z -
  10306.  
  10307.  ZONE                
  10308.  ZONEINIT            
  10309.  ZONETABLE           
  10310.  ZONETABLESIZE       
  10311.  ZONETEST            
  10312.  ZOOMX2              
  10313.  ZOOMX4              
  10314.  ZOOMX8              
  10315.  ZOOMXY              
  10316.